Form antispamming con php

Lo spamming o spam è un comportamento illegele che alcuni individui adottano su internet inviando (in automatico) email pubblicitarie o con collegamenti a siti di phishing (siti copia di grossi portali, ad esempio banche... solitamente viene fatto per rubare le password di accesso).

Un comportamento molto simile viene a volte adottato sui form che abbiamo nel nostro sito, pensate che la nostra directory riceveva 40/50 segnalazioni al giorno, più della metà incomprensibili, da cestinare.

Per eliminare le intrusioni automatiche nei nostri form è necessario inserire una variabile di controllo sempre diversa che possa regolamentare il flusso di informazioni.
In questo modo solo un navigatore, agendo manualmente, potrà compilare ed inviare il form.

Per fare questo dobbiamo creare una variabile numerica casuale, memorizzarla in un cookie o sessione, e verificare la corrispondenza di quella inserita nel form.

Vista la semplicità non ci dilungheremo in altre spiegazioni ma passeremo subito allo script:


Prova Script:



PROVA:

Inserisci il codice per convalidare l'invio:
7611


AZZERA


N.B.
Il link AZZERA lo dobbiamo inserire perchè la variabile con il codice è stata memorizzata nella sessione quando abbiamo attivato il form. Se non inseriamo un link diretto alla pagina (senza passare dal form) la variabile con il codice non varierà (in pratica dobbiamo annullare la variabile di controllo form).
Da adesso passeranno solo inserimenti MANUALI.


Codice:

<form action="articolo_php_form_antispam.php" method="post">
<table bgcolor="ffffcc" width="200" cellpadding="5" cellspacing="5">
<?
$attivazione=$_POST['attivazione'];
$testo=$_POST['testo'];
if(!$testo){$testo="..testo..";}
$code=$_POST['code'];
if($attivazione!=2){// creo e carico la variabile anti-spam nella sessione se sono appena entrato nella pagina (form non attivato)
$bast=rand(1,9999);//$bast è la variabile anti spam, un numero sasuale da 0 a 9999
$_SESSION['bast']=$bast;// da adesso fino a quando non riazzero il form la variabile è memorizzata
}
if($attivazione==2){// (in questo caso anche else)
if($code==$_SESSION['bast'] and $_SESSION['bast']!=""){// verifico l'esattezza
echo"<tr><td align=\"center\" colspan=\"2\">FORM SPEDITO CORRETTAMENTE<br></td></tr>";// qui posso fare tutto quello per cui il form è stato creato
}
else{// se la variabile non è uguale produco un errore a video
echo"<tr><td align=\"center\" colspan=\"2\">CODICE ERRATO - FORM <b>NON</b> SPEDITO</td></tr>";
}
}

// Form di segnalazione:
echo"<tr><td colspan=\"2\" align=\"center\">
<input type=\"hidden\" name=\"attivazione\" value=\"2\">
<input type=\"text\" name=\"testo\" size=\"10\" maxlength=\"10\" value=\"".$testo."\">
</td></tr><tr><td align=\"right\">
<table><tr><td style=\"background-image= url(d3.gif)\">
<i>".$_SESSION['bast']."</i> // qui scrivo la variabile di sessione
</td></tr></table>
</td><td align=\"left\">
<input type=\"text\" name=\"code\" size=\"4\" maxlength=\"4\" value=\"".$code."\">
</td></tr><tr><td colspan=\"2\" align=\"center\">
<input type=\"submit\" value=\" Prova \">";
?>
</td></tr></table>
</form>
?>

Commenti

Post popolari in questo blog

Simulazioni di reti (con Cisco Packet Tracer)

Esercizi sulla rappresentazione della virgola mobile IEEE 754 (Floating Point)