form anti-spam

Posto un trucchetto che mi è venuto in mente per avere semplice form anti-spam in una pagina web, senza controlli complicati captcha.

L’idea è che lo spam attraverso i form deriva da robots (ovvero programmi automatici) che analizzano le pagine web, e quando vedono un <form>, effettuano una chiamata alla pagina indicata nella action riempendo gli input con spam e postando.

Si può effettuare un semplice controllo antispam facendo una domanda del tipo ‘quanto fa 4-5 ?’ chiedendo di riempire il campo (quindi accettare il form solo se tale campo ha valore 9), oppure una soluzione tramite javascript/php che all’utente non chiede nulla:

client:

  • inserire campo aggiuntivo hidden
     <input type="hidden" name="conferma" value="" />
  • non mettere un tasto submit, ma un tasto button che (onclick) setta il campo hidden e poi effettua il submit
    <input type="button" name="Submit" style="font-weight:bold" value="Invia" onclick="this.form.conferma.value='<?=time()?>’; this.form.submit()" />

server:

  • effettuare un controllo sul valore del campo conferma. Qualora il valore sia troppo diverso (e quindi probabilmente derivante da un robot o proveniente da un’altra pagina), scartare la richiesta.
    if (abs($_POST[‘conferma’] – time()) > 3600) exit("spam !!");
     

Controllo eventuale aggiuntivo: controllare il $_SERVER[‘HTTP_REFERER’] che sia quello della pagina che invia il form.

Per ovviare ai clients che non supportano javascript, si potrebbe scrivere il form html con il campo conferma di tipo text (scrivendo accanto che cosa s) e il pulsante submit di tipo submit

Leave a Reply

Your email address will not be published. Required fields are marked *