Visualizzazione risultati 1 fino 5 di 5

Discussione: [PHP] Chi mi da una mano con i Captcha

  1. #1
    Guest

    Predefinito [PHP] Chi mi da una mano con i Captcha

    Ciao Ragazzi,

    ho trovato finalmente uno script Captcha che mi consente di proteggere i miei form dagli spamBot, però purtroppo dopo vari tentativi non sono ancora riuscito ad intergrarlo nei miei form...

    Chi è disposto a darmi una mano?

  2. #2
    L'avatar di seneca
    seneca non è connesso Super Moderatore
    Data registrazione
    18-12-2004
    Residenza
    la Città Eterna
    Messaggi
    8,376

    Predefinito

    Se magari fornissi informazioni fondamentali come il codice ed eventuali errori riportati...


    -- Aut Roma Aut Nihil!

  3. #3
    Guest

    Predefinito

    Allora devo proteggere lo script di una Top 100!

    Per quanto riguarda il Captcha, devo creare questa tabella nel database

    Codice PHP:
    CREATE TABLE validation (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    url_key CHAR(40) UNIQUE NOT NULL,
    captcha CHAR(32) NOT NULL,
    expire_date DATETIME NOT NULL,

    PRIMARY KEY(id),
    INDEX(url_key)
    );
    Invece lo script è il seguente:

    (Per la generazione dell'immagine)

    Codice PHP:
    <?php

    $pdo
    = new PDO('mysql:host=localhost;dbname=captcha', 'root', '');

    $stmt = $pdo->prepare("SELECT * FROM validation WHERE url_key = ? AND expire_date > NOW()");
    $stmt->execute(array($_GET['token']));

    $row = $stmt->fetch(PDO::FETCH_ASSOC);

    $texture = imagecreatefrompng('texture.png');

    $source = imagecolorat($texture, rand(0, imagesx($texture)), rand(0, imagesy($texture)));
    $r = ($source >> 16 & 0xff) + 50;
    $g = ($source >> 8 & 0xff) + 50;
    $b = ($source & 0xff) + 50;
    $text_color = imagecolorallocate($texture, $r, $g, $b);

    imagestring($texture, 5, (imagesx($texture) - strlen($row['captcha']) * 5)/ 2, 5, $row['captcha'], $text_color);

    header('Content-Type: image/png');

    imagepng($texture);

    imagedestroy($texture);

    ?>
    (per il controllo dell'immissione dei dati)

    Codice PHP:

    <?php

    function random_string($len)
    {
    $string = "";
    $chars = array("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k",
    "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v",
    "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G",
    "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R",
    "S", "T", "U", "V", "W", "X", "Y", "Z", "0", "1", "2",
    "3", "4", "5", "6", "7", "8", "9");
    for(
    $i = 0; $i < $len; ++$i)
    {
    shuffle($chars);
    $string .= $chars[0];
    }

    return
    $string;
    }

    $message = 'Inserisci la scringa alphanumerica per effettuare la validazione:';

    $pdo = new PDO('mysql:host=localhost;dbname=captcha', 'root', '');
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    if(isset(
    $_POST['validate_token']))
    {
    // Eseguo la validazione
    $stmt = $pdo->prepare("SELECT * FROM validation WHERE url_key = ? AND expire_date > NOW()");
    $stmt->execute(array($_POST['token']));

    $row = $stmt->fetch(PDO::FETCH_ASSOC);

    $message = ($row && ($row['captcha'] == $_POST['validate_token'])) ? 'token corretto' : 'token <strong>NON</strong> corretto';
    $stmt = $pdo->prepare("DELETE FROM validation WHERE url_key = ?");
    $stmt->execute(array($_POST['token']));
    }

    // Elimino tutti i record scaduti
    $pdo->query("DELETE FROM validation WHERE expire_date <= NOW()");

    // Genero casualmente un record per la tabella validation
    $url_key = sha1(uniqid(rand(), true)); // Possiamo (e dovremmo) fare meglio
    $captcha = random_string(6);
    $stmt = $pdo->prepare("INSERT INTO validation (id, url_key, captcha, expire_date) VALUES ('', ?, ?, DATE_ADD(NOW(), INTERVAL 5 MINUTE))");
    $stmt->execute(array($url_key, $captcha));

    ?>
    <html>
    <head>
    <title>CAPTCHA test</title>
    </head>
    <body>
    <form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    <input type="hidden" name="token" value="<?php echo $url_key; ?>" />
    <p>
    <?php echo $message; ?>
    </p>
    <img src="captcha.php?token=<?php echo $url_key; ?>" width="200" height="30" /><br/>
    <input type="text" name="validate_token" />
    <input type="submit" name="action" value="Test" />
    </form>
    </body>
    </html>

  4. #4
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Per prima cosa dovresti modificare tutte le funzioni PDO per connetterti al database con quelle che si usano normalmente.
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  5. #5
    Guest

    Predefinito

    Si quello lo so...però io devo integrare questo script con un altro già esistente: è un php script di una top 100 che ha un file d'installazione, cmq penso sia sufficente applicare il captcha al form d'iscrizione, però non so come fare! Voi sapreste aiutarmi?

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •