blog personale

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

2 Responses to “form anti-spam”

  1. Ali Servet Dönmez

    on July 6 2008

    Elvis, usare textcha anziche’ captcha e’ una soluzione comunamente usata sul web.

    Bisogna essere attenti a quali domande da fare. La domanda del tipo “4+5?” e’ pessima idea, perche’ e’ facilmente computabile da un computer.

    Quindi, le domande del tipo “quale e’ la capitale d’Italia?” (risp: roma|Roma) sono migliori da questo punto di vista.

    Per quanto riguarda l’utilizzo di un button anziche’ submit nelle form anche se potrebbe sembrare una soluzione furba, in realta’ sta facendo un’operazione che W3C non approverebbe, quindi secondo me meglio evitare i trucchi che non andrebbero d’accordo con i standard.

  2. admin

    on July 8 2008

    maledetto w3c ! :D
    per quanto riguarda il funzionamento sui diversi browsers con javascript abilitato o no, con l’ultima riga intendevo che si può inizialmente mettere un campo di testo con textcha, che però viene trasformato in hidden e riepito (tramite ajax) con il giusto valore. in pratica chi ha javascript abilitato non deve fare niente, altrimenti inserisci il codice o risponde a una eventuale domanda.

    Cmq sono d’accordo che il captcha è il migliore, anche secondo me sarebbe il caso di reimplementarselo da soli (anche in maniera + semplice con le gd library). Quelli già pronti sono generati da codice noto, quindi facilmente “spammabile” (es: phpbb forum di qualche mese fa, release stabile, con controlli captcha, in pochi giorni me l’hanno riempito di spam)

    grazie del commento !

Comment RSS · TrackBack URI

Leave a comment

Name: (Required)

E-mail: (Required)

Website:

Comment:

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word


 

Ultimi post

About Me

Blog tecnico/geek di Elvis. Chi sono ? studente & web developer freelance. Vedi la pagina "about me" per altre info.

scontiPHP