I captcha sono quelle immagini con all'interno numeri e lettere, spesso deformate che dovete riscrivere in una casella di testo. Questi sistemi servono per bloccare lo spam e in generale chiunque usi sistemi automatici per registrare falsi utenti o inviare commenti. Il funzionamento è semplice ma efficace, mentre il nostro cervello riesce facilmente (non sempre...) a capire delle lettere anche se molto deformate, per un computer è praticamente impossibile. L'unico problema di questi captcha grafici è che talvolta tagliano completamente fuori le persone con problemi visivi e che usano lettori in grado di leggere le pagine web. Ovviamente una immagine non può essere letta da un pc!
Una variazione al tema dei captcha grafici è quello di porre una facile domanda all'utente come ad esempio chiedere di eseguire una somma.
L'implementazione che ho scelto per l'estrema facilità è quella di usare le sessioni con PHP per portarmi dietro i risultati alle somme proposte.
Innanzitutto avviamo una nuova sessione. Se questa è già presente avremo a portata di mano i dati della sessione in corso
session_start();
Iniziamo col generare due numeri casuali da 1 a 9
$num1 = rand(1,9);
$num2 = rand(1,9);
Sommiamoli e memorizziamoli nella sessione corrente
$_SESSION['code'] = $num1 + $num2;
Adesso stampiamo il form con la domanda
<form action=\"captcha.php\" method=\"POST\">
<?
echo "<label for=\"code\">Quanto fa <span id=\"num1\"></span> + <span id=\"num2\"></span>? </label>";
?>
<input name="code" type="text">
<input type="submit" name="submit">
</form>
Quindi per controllare che l'utente abbia dato la giusta risposta faremo un semplice controllo
if( isset( $_POST['submit'] ) )
{
if( $_POST['code'] == $_SESSION['code'] )
echo "<b>Accettato</b>";
else
echo "<b>Codice sbagliato</b>";
}
Praticamente controlliamo che l'utente abbia fatto click sul pulsante di invio dati, successivamente, in caso affermativo, controlliamo che la giusta somma da noi calcolata precedentemente sia uguale a quella data dall'utente.
Direte voi, come mai resta memorizzata all'interno della variabile globale $_SESSION anche dopo il ricaricamento? Semplicemente perché le sessioni possono mantenere dati lungo tutta la navigazione della pagina fino a che non si riavvia il browser.
Ecco il codice completo:
session_start();
if( isset( $_POST['submit'] ) )
{
if( $_POST['code'] == $_SESSION['code'] )
echo "<b>Accepted</b>";
else
echo "<b>Wrong code</b>";
}
$num1 = rand(1,9);
$num2 = rand(1,9);
$_SESSION['code'] = $num1 + $num2;
echo "<form action=\"captcha.php\" method=\"POST\">";
echo "<label for=\"code\">Quanto fa $num1 + $num2? </label>";
echo "<input name=\"code\" type=\"text\">";
echo "<input type=\"submit\" name=\"submit\"></form>";
Se vi interessa c'è un trucchetto per precompilare il form da javascript in modo da non renderlo visibile agli spam-bot (per ora!).
Basta incapsulare i due numeri i due , un piccola routine javascript leggerà tali , sommerà il loro contenuto e lo stamperà nel campo di testo.
echo "<form action=\"captcha.php\" method=\"POST\">";
echo "<label for=\"code\">Quanto fa <span id=\"num1\">$num1</span> + <span id=\"num2\">$num2</span>? </label>";
echo "<input name=\"code\" type=\"text\">";
echo "<script language=\"JavaScript\" type=\"text/javascript\">
document.form.code.value=eval((document.getElementById('num1')).innerHTML)+eval((document.getElementById('num2')).innerHTML);
</script>";
echo "<input type=\"submit\" name=\"submit\">
</form>";
Alla prossima!

















Dai il tuo parere: Commenta questo articolo!
0 commenti su [PHP] Captcha testuale semplice semplice
Lascia un commento