Come integrare un antispam nei nostri form php
Forse potrebbe interessarti anche...
![]()
Seguendo l’idea che sta alla base di Hiddy, mi sono fatto il mio personale antispam.
Il mio form di solito si compone di un singolo file PHP dove c’è tutto dentro: il form vero e proprio e il codice PHP che serve a spedire l’email.
L’idea alla base di Hiddy, per chi non lo sapesse, è di accantonare captcha vari per qualcosa di molto più semplice, che – detto terra-terra – lo metta in quel posto agli spam-bots!
I robot che spammano riempiendo tutti i form che trovano nel web seguono una semplice regola: riempi tutti i campi del form prima di spedirlo.
BENE! Basandoci su questo semplice presupposto basta inserire un campo testo che non deve essere riempito per poter validare il form!
A questo punto, senza dilungarmi sulle altre ovvie implementazioni di sicurezza, l’implementazione del nostro anti-spam si fa in 3 fasi:
- inserire un campo testo
- nascondere il campo testo ai bots
- verificare che il campo testo è vuoto
Inserire il campo testo è semplice (html):
<input name="antispam" type="text" id="antispam" value="" />
Nasconderlo ai bots è altrettanto semplice, applicando uno stile al campo testo; i robots sono scemi e non capiscono che quel campo è visibile solo a loro e non agli navigatori normali. (css):
style="display:none"
Verificare che il contenuto sia inalterato, al momento in cui il nostro codice PHP analizza i dati ricevuti dal form (php):
if ($antispam != '') { die("errore antispam"); }
Volendo esagerare, al posto di un campo testo vuoto si può scriverci una parola di sicurezza, che se cambiata invalida il form.
Mi pare tutto chiaro, no?


Adesso si che l’ho capito. Grazie.
L’unica cosa che posso dirti è che funziona! Anche su WP lo spam è pochissimo. Quel poco che arriva analizzando i log pare proprio fatto a manella.
Cmq su hiddy c’è molto di più della mia umile idea.
p.s.: grazie per il link!
…quello che vedete sopra è l’inizio di un’amicizia virtuale
Ahò! Ecchè mme stai a pià per c**o?
No mi ha fatto piacere il tuo post e conoscere il tuo blog che non conoscevo. Anzi l’ho inserito in bloggeritaliani.com, spero non ti dispiaccia.
Ci mancherebbe che mi dispiacesse pure!!!
Son sempre contento quando il mio lavoro va in giro. Peace!
decisamente una bella idea! molto più visitor friendly dei numeri di verifica.
però il mio form è in html e non so in che punto piazzare la riga style=”display:none”
il resto è tutto chiaro (e funzionante: grazie per la dritta).
ciao,
Spino.
ps: nel caso ti andasse di spiegarmi dove ficcare il display none ti scrivo sotto l’indirizzo della pagina.
http://flipflop.altervista.org/mail2spino.html
Ad esempio così, inserendo lo stile nel campo input nascosto:
input style="display:none" name="frase" type="text" id="frase" value=""Nel tuo caso però penso sia meglio inserire lo stile dentro il tag TR della riga della tabella che contiene il campo da nascondere:
tr align="center" valign="middle" style="display:none"grazie davvero fratello!
non ho parole per la tua tempestività: stamattina non potevo credere ai miei occhi nel trovare già la soluzione… evidentemente credi seriamente alla condivisione del know how!
ti devo comunque un favorone!
con riconoscenza,
Spino.
eh!eh! Prego, prego.
allora… per dovere di completezza, e anche per ricambiare la consulenza dell’ottimo Doz, vi aggiorno sulla mia situazione di spammato.
anche dopo aver corretto il form ho continuato a ricevere spamming in modo massivo, dallo stesso spider (identici messggi).
siccome credevo nel metodo suggerito da DoZ, sono “andato in puzza” e ho cercato di capire come fosse possibile.
il mio form si compone di tre elementi (ok sarebbe meglio uno solo in php ma io sono un novellino): il form in html, la pagina php che manda la mail (send.php) e un’altra pagina html che conferma l’avvenuto invio e offre un menu di navigazione.
seguendo i consigli ho cambiato i primi due ma lo spam continuava.
brevemente: mi è venuto il sospetto che lo spammer avesse memorizzato i dati da mandare al send.php, aggirando così il campo trappola presente nel file html.
a questo punto ho cambiato la locazione del file php (semplicemente rinominandolo in “sendMail.php” e lo spam è cessato (prima ne arrivavano almeno 5 al dì).
dunque confermo che il metodo è efficace: se lo si usa in maniera preventiva è sufficiente aggiungere il campo trappola; se si è già vittima dello spam basta cambiare nome al php che esegue l’ordine.
non sono per niente certo del nesso causale (che lo spammer memorizzi le istruzioni da mandare al php, e cioè riempire solo i soliti campi e non tutti, è solo una ipotesi deduttiva) ma posso assicurare che il rimedio è efficace.
grazie ancora DoZ.
@DoZ: se la vuoi fare ancora più “figa” puoi mettere il nome del campo random e memorizzarlo in un cookie. E nell’altra pagina verifichi la presenza del cookie etc…. gestendo scadenze e quant’altro.
@Spino: si, cambiando il nome allo script aggiri il problema ma per poco
gli spammer hanno liste di url con i vari form da riempire
se te gli sposti il form si, non ricevi spam
ma al prossimo giro del crawl trovano il nuovo form e ricominci tutto da capo
@Doz: utile come soluzione, ma non si sa mai cosa va a capire google
display=none -> testo nascosto, penalizzazione, ban
continuo a preferire i vecchi captcha, le equazioni matematiche
o le baggianate di billy http://research.microsoft.com/en-us/um/redmond/projects/asirra/
@ n0n3: grazie per il tuo commento! Riguardo Google e il display:none personalmente credo che non sia così matematica la penalizzazione.
@ n0n3:
Come detto da Doz, la penalizzazione non avviene assolutamente per display:none o campi hidden vari. L’importante è non mettervi dentro porzioni di testo abbondante, chiavi di ricerca e link.