Programmazione.it v6.4
Ciao, per farti riconoscere devi fare il login. Non ti sei ancora iscritto? Che aspetti, registrati adesso!
Info Pubblicità Collabora Autori Sottoscrizioni Preferiti Bozze Scheda personale Privacy Archivio Libri Corsi per principianti Forum
Greenpeace
Un banale script per i CAPTCHA
Scritto da Cosmos Puglisi il 10-06-2009 ore 09:10
Intel Parallel Studio XE
Tante sono le librerie e i metodi per creare i CAPTCHA, tuttavia è bene citare sempre qualche nuova idea originale, soprattutto quando si tratta di mettersi al sicuro da spam, poiché l'originalità può essere un'arma vincente.

In un articolo apparso su Dev Shed vediamo come creare uno script che faccia al caso nostro. Useremo solo il linguaggio PHP, la libreria grafica GD (inizialmente) e il database MySQL.
  1. //start session which will be used to store generated numbers of validation in the form 
  2. session_start(); 
  3. //generate random number between 10,000 and 99999 
  4. $number =mt_rand(10000, 99999); 
  5. //store generate random number to a session 
  6. $_SESSION['answer']=$number; 
  7. //create image 50 x 50 pixels 
  8. $imagecreate = imagecreate(50, 50); 
  9. // white background and blue text 
  10. $background = imagecolorallocate($imagecreate, 255, 255, 255); 
  11. $textcolor = imagecolorallocate($imagecreate, 0, 0, 255); 
  12. // write the string at the top left 
  13. imagestring($imagecreate, 5, 5, 10, $number, $textcolor); 
  14. // output the image 
  15. header("Content-type: image/png"); 
  16. $image= imagepng($imagecreate);
Lo script di cui sopra, in ordine, genera un numero in modalità random, lo memorizza nella sessione PHP $_SESSION, crea una semplice immagine 50x50 pixel con testo blu e sfondo bianco con il numero generato. Per usarlo basta richiamare questo script come segue:
  1. <br/> 
  2. <img src="captxt.php"/> 
  3. <br/> 
  4. Type the security code above: 
  5. <br/> <br/> 
  6. <input type="text" name="captcha" size="10">
Se invece vogliamo ottenere lo stesso scopo senza libreria grafica, ma con l'uso del database, a patto di aver creato manualmente le immagini, useremo lo script che segue.
  1. $username = "username"; 
  2. $password = "password"; 
  3. $hostname = "localhost"; 
  4. $database = "captcha"; 
  5. $dbhandle = mysql_connect($hostname, $username, $password) or die("Unable to connect to MySQL"); 
  6. $selected = mysql_select_db($database,$dbhandle) or die("Could not select $database"); 
  7. echo 'Enter captcha (Case sensitive for security measure) <br/>'; 
  8. echo '<input type="text" name="cvd" size="50">'; 
  9. //generate captcha 
  10. $random= rand(1,12); 
  11. $random = mysql_real_escape_string(stripslashes($random)); 
  12. $result2 = mysql_query("SELECT `imagepath` FROM `captcha` WHERE `number`='$random'") or die(mysql_error()); 
  13. $row = mysql_fetch_array($result2) or die("Invalid query: " . mysql_error()); 
  14. $captcha = $row['imagepath']; 
  15. echo '<img src="'.$captcha.'"/>'; 
  16. $random = mysql_real_escape_string(stripslashes($random)); 
  17. //extract answer of captcha 
  18. $result3 = mysql_query("SELECT `answer` FROM `captcha` WHERE `number`='$random'") or die(mysql_error()); 
  19. $row = mysql_fetch_array($result3) or die("Invalid query: " . mysql_error()); 
  20. $answer = $row['answer']; 
  21. //store answer to a session variable 
  22. $_SESSION['captchaanswer']=$answer;
In questo caso nella tabella captcha ci sono tre colonne: imagepath, number e answer. La prima colonna contiene le immagini memorizzate nel database mentre l'ultima contiene la stringa reale contenuta nelle immagini che vengono selezionate, in questo script, con un numero casuale da 1 a 20 legato alla seconda colonna. Prendiamo atto che questo non è il massimo che si può ottenere con i CAPTCHA, ma è sicuramente una buona idea da sviluppare.
Precedente: Motori di ricerca sempre più veloci
Successiva: Troubleshooting Oracle Performance
Copyright Programmazione.it™ 1999-2013. Alcuni diritti riservati. Testata giornalistica iscritta col n. 569 presso il Tribunale di Milano in data 14/10/2002. Pagina generata in 0.316 secondi.