Scrivere a mano un controllo antispam con PHP

Come sviluppare in PHP un potente antispam personalizzato da inserire in un modulo di una pagina web

spambot infographic

Per limitare lo spam sulla casella di posta elettronica, dovuto alla presenza della nostra mail in chiaro sul sito, abbiamo avuto la splendida idea di inserire un modulo di contatto in PHP sperando di limitarlo. Il risultato? Lo abbiamo solo peggiorato.

Gli spambot sono ovunque, scandagliano la rete non solo alla ricerca di indirizzi di posta elettronica, ma anche di moduli di contatto, e una volta rintracciati questi vengono praticamente bombardati di spam.

Le soluzioni sono tante, dalla risoluzione di un captcha, alla selezione di immagini, ma ho preferito adottare la pratica del fai da te, usando PHP.

 

L’idea

Ho sviluppato con pochissime righe un controllo antispam efficiente, leggero, e che non prevede l’importazione di nessuna libreria di terze parti.

L’idea è molto semplice.

Inserire all’interno del form dei radio button da valorizzare rispettando un numero casuale generato dalla pagina stessa. La domanda dovrà poi essere codificata, e anche i valori di risposta dei radio button.

Lo schematizzo in una tabella prima di spiegarlo in maniera più comprensibile.

Numero generato Domanda associata Risposta associata
visibile nel radio button
Valore del
radio button
1 Seleziona uno 1 mamma
2 Seleziona due 2 papa
3 Seleziona tre 3 sorella
4 Seleziona quattro 4 fratello
5 Seleziona cinque 5 cugino
  • La pagina, all’apertura, genererà un numero da 1 a 5. Prendiamo come esempio il 3.
  • Al numero 3 verrà posta come domanda Seleziona tre.
  • La risposta associata nel radio button è il 3
  • Il valore, in html, del radio button è sorella.

Quando daremo l’Invia una procedura convertirà il valore sorella nel 3. Lo confronterà con il valore generato, e dopo aver capito che il valore coincide, il form viene compilato.

modulo contatti selectallfromdual

 

Il codice

Il codice è molto semplice, lo scriverò rispettando la tabella della codifica scritta in alto.

Per prima cosa andremo a generare un numero randomico da 1 a 5. Questo è solo un esempio, poi potremo espandere il range per il numero casuale, rendendo il controllo antispam ancora più difficile da passare per uno spambot.

$numerocasuale = rand(1,5);

A questo punto inseriremo il metodo che tradurrà il valore generato in una questione da risolvere

function getDomanda($numero) {
	switch ($numero) {
		case 1:
		return "Seleziona uno";
		break;
		case 2:
		return "Seleziona due";
		break;
		case 3:
		return "Seleziona tre";
		break;
		case 4:
		return "Seleziona quattro";
		break;
		case 5:
		return "Seleziona cinque";
		break;
		default:
		return "NESSUNO";
		break;
	}
}

Poi, inseriremo il metodo che convertirà il valore scelto con il radio button nel corrispettivo valore da confrontare

function getNumero($lettera) {
	switch ($lettera) {
		case "mamma":
		return 1;
		break;
		case "papa":
		return 2;
		break;
		case "sorella":
		return 3;
		break;
		case "fratello":
		return 4;
		break;
		case "cugino":
		return 5;
		break;
		default:
		return "NESSUNO";
		break;
	}
}

La configurazione è fatta. A questo punto dobbiamo inserire il radio button nel nostro form, non dimenticandoci di un campo hidden che riporterà il numero generato. Facciamo attenzione ad impostare come valori dei radio button gli stessi della tabella che abbiamo scritto sopra.

<form action="<?php echo $_SERVER['php_self'] ?&amp;gt;" method="post" bla bla bla>
	...
	Seleziona <?php echo getDomanda($numerocasuale); >
	1 <input type="radio" name="valoreradio" value="mamma"/>
	2 <input type="radio" name="valoreradio" value="papa"/>
	3 <input type="radio" name="valoreradio" value="sorella"/>
	4 <input type="radio" name="valoreradio" value="fratello"/>
	5 <input type="radio" name="valoreradio" value="cugino"/>
	<input type="hidden" name="copianumero" value="<?php echo $numerocasuale; >">
	...
	...
</form>

All’interno della procedura dell’azione, inserire la seguente condizione

if ($_POST['copianumero'] == getNumero($_POST['valoreradio'])) {
	// esegui la mia azione
}

Se il valore contenuto nel campo hidden è uguale al valore tradotto del valore del radio button, allora esegui la mia azione.

Se qualche spambot riesce a risolvere il quesito vuol dire che basta aumentate il range del numero generato, e quindi anche i quesiti e le risposte, oppure cambiare i valori dei radio button ricordandoci di  cambiare la mappatura del metodo che lo converte.

Fonte immagine: https://news.sophos.com/…

Condividi se l'articolo ti è piaciuto, ci aiuterai a crescere

Francesco

Fondatore e amministratore di Dummy-X dal 2007, condivido interessi, idee, progetti, e soluzioni informatiche. Non vendo prodotti, mi limito a descrivere tecnologie e a mettere a disposizione gli strumenti adatti per poter realizzare idee. Tutto ciò che scrivo è frutto della mia esperienza lavorativa e della mia voglia di imparare. Da sempre studio l'informatica in tutte le sue angolazioni (software, hardware, reti e sicurezza) e negli ultimi anni mi sono specializzato nello sviluppo di web applications. Sono sempre aperto a nuove sfide e alla ricerca e conoscenza delle nuove tecnologie.
 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *