Implementare un Filtro Anti Spam per form Contatti in html e php

Giorgio Borelli

modulo html form contatti anti spamLo spam lo sappiamo bene, è una delle forme di 'attacco' web informatico più diffusa, consiste nel vedersi recapitare decine, centinaia se non miglia di messaggi di posta elettronica indesiderata, ci siamo passati tutti ed è qualcosa di davvero fastidioso, e se il numero di messaggi email non richiesti aumenta, talvolta diventa enorme, allora non e più un fastidio ma diventa un problema, la casella di posta elettronica che si intasa risulta difatti inutilizzabile.

Sebbene si cerchi di arginare il fenomeno con opportuni filtri antispam, ad oggi nessuno è esente da questi attacchi spam, chi più chi meno, chi prima chi dopo, tutti i possessori di un indirizzo email, saranno soggetti prima o poi a ricevere spam.

Questo aspetto è tanto più vero quanto più massiccia è la presenza e diffusione del nostro indirizzo email in rete, se poi possediamo un qualche tipo di spazio web, un sito, nel quale mostriamo un modulo contatto, allora diventa facile, facilissimo, che questo venga preso di mira dagli spammer e che la nostra mail box si riempia di questa indesiderata email spazzatura in brevissimo tempo; talvolta si verificano vere e proprie ondate di attacchi, nuovi spam robots, con indirizzi nuovi e non riconosciuti dai filtri antispam dei principali client di posta elettronica, aggrediscono i form di contatto presenti online, inondano le caselle di posta degli indifesi utenti.

Come fare allora ad arginare questo problema? Ma principalmente se siamo dei bravi webmaster, come possiamo implementare un filtro antispam nel modulo contatti del nostro sito web o di quello del nostro cliente? Andiamo a scoprire come fare.

Per creare un filtro antispam manuale in html nel form contatti del nostro sito web, dobbiamo dapprima capire come attacca lo spam, per prendere le giuste ed intelligenti contromisure.

Gli attacchi spam ai moduli di contatto, non avviene a mezzo degli operatori umani, ma tramite dei software automatizzati in grado di girare autonomamente per il web, una sorta di crawler (spider o robots) come quelli usati dai motori di ricerca per scansionare ed indicizzare le pagine web, questi spam robots conoscono la natura html di un form di contatto, ne riconoscono i campi (i classici: nome, cognome, oggetto e messaggio) e ne individuano l'azione di submit (sottoscrizione del form), pertanto li compilano in automatico e fanno partire l'email verso la nostra casella di posta con il loro contenuto indesiderato, contenente talvolta anche link a risorse malevoli, quindi dobbiamo necessariamente porvi rimedio in qualche modo.

Se loro conoscono il form contatto ed i campi (input) in esso presente poiché all'incirca sono sempre gli stessi elementi, potremmo allora essere noi più furbi di loro, e sfruttare a nostro vantaggio gli automatismi che loro mettono in atto fregandoli con un piccolo trucchetto, che consiste banalmente nell'inserire all'interno del form un campo nascosto non standard, questo "nuovo" campo che imposteremo come non obbligatorio e non visibile all'utente normale risulterà vuoto all'atto di sottoscrizione del form se compilato da un utente reale, il campo non risulta visibile, non è obbligatorio e pertanto il suo valore risulta vuoto se il form è stato compilato e sottoscritto da un utente normale (che non vede e non sa che esiste questo campo nascosto, quindi non lo compila, risulta vuoto); mentre lo spam robot che è in grado di leggere l'html ed i campi input del form cercherà di compilarlo ugualmente, pensando che è qualcosa di necessario all'invio del form, beh! a questo punto basterà implementare un piccolo controllo server side (lato server), potete farlo in php o qualsiasi altro linguaggio web che preferiate e verificare che il campo nascosto sia vuoto (e non pieno), perché se lo fosse allora le probabilità che sia stato compilato in modo automatico da uno spammer sono elevatissime. Intelligente e semplice, NO?

Facciamo un piccolo esempio, simulando il codice html di un form contatti con all'interno questo campo (sentinella) nascosto:

						<form method="post" action="send.php" accept-charset="UTF-8">
							<div class="row">
								<div class="form-inputs">
									<label for="name">Nome (*)</label>
									<input type="text" value="" name="name" id="name" required="required" />
								</div>
								<div class="form-inputs">
									<label for="mail">Email (*)</label>
									<input type="email" id="mail" name="email" value="" required="required" />
</div> <div class="form-inputs"> <label for="subject">Oggetto (*)</label> <input type="text" id="subject" name="subject" required="required" />
</div> <div class="form-textarea"> <label for="message">Messaggio (*)</label> <textarea id="message" name="message" required="required"></textarea>
</div> </div> <p class="form-submit"> <input name="nospam" type="text" style="display:none;" /> <input type="submit" name="submitted" value="Invia" /> </p> </form>

 

Come vedi in questo form contatti, ritroviamo i classici campi di input (messi in grassetto): nome, email oggetto e messaggio; è molto semplice per uno spammer automatizzato riconoscerli, compilarli ed eseguire l'azione (action) di submit che invoca il file di script send.php. In rosso ho evidenziato però il campo che noi abbiamo innestato come sentinella, per carpire se è uno spam automatizzato a compilare il form o meno, con una semplicissima regola di stile facciamo in modo che questo campo risulti nascosto, o meglio non visibile all'utente navigatore, che ovviamente non vedendolo non lo compilerà, al contrario dello spammer auto che essendo stupido lo vede all'interno del form e cerca di compilarlo pensando che sia un campo di input legittimo, ma sapendo questo a noi per fregarlo non resta che fare un banale controllo nel codice lato server responsabile dell'invio del form, in questo caso send.php che risulta pressapoco come:

if(isset($_POST["nospam"]) && $_POST["nospam"] == "") {//spam protection
	if(isset($_POST['submitted'])){

		// Assegno i dati in post
		$name = $_POST['name'];
		$email = $_POST['email'];
		$subject = $_POST['subject'];
		$message = $_POST['message'];

//invio della mail e proseguo dello script php...

 

Il primo if di cui sopra è quello che implementa il controllo sul campo sentinella "nospam" ed è quello che di fatto filtrerà le richieste di invio del form legittime da quelle fatte da un possibile spam auto. Se il campo "nospam" è settato ed è vuoto allora proseguo correttamente con la rilevazione degli altri dati in form e poi con l'invio della mail, diversamente se il campo è pieno non faccio eseguire il codice di invio, restituendo magari un messaggio di errore o terminando immediatamente lo script poiché certo che è stato uno spam a redirlo. Il successivo if, quello più interno, fa invece il controllo che sia stato inviato (sottoscritto) il form tramite click sul bottone "Invia" (di tipo submit).

Et voilà! Il nostro manuale filtro antispam su modulo contatti html è pronto; semplice, efficace ed elegante, senza captcha o necessità d'integrare script o plugin di terze parti. Abbiamo sfruttato a nostro vantaggio gli stessi automatismi che gli spam robots utilizzano per attaccare i form di contatto presenti nei siti web. Utilizzo questa tecnica come filtro anti-spam su diversi miei siti web, ed è efficace non solo per il modulo contatti ma anche per qualsiasi altro form html presente su pagine web, che esso sia la registrazione, iscrizione newsletter o un semplice acquisizione contatti, provatelo e mi saprete dire, per ogni domanda o chiarimento t'invito a dire la tua tramite l'apposito modulo dei commenti sottostanti.

Categorie: html | PHP

Tags: ,

Aggiungi Commento

biuquote
Loading