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?
Printable View
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?
Se magari fornissi informazioni fondamentali come il codice ed eventuali errori riportati...
Allora devo proteggere lo script di una Top 100!
Per quanto riguarda il Captcha, devo creare questa tabella nel database
Invece lo script è il seguente: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)
);
(Per la generazione dell'immagine)
(per il controllo dell'immissione dei dati)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);
?>
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>
Per prima cosa dovresti modificare tutte le funzioni PDO per connetterti al database con quelle che si usano normalmente.
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?