PHP: proteggersi dallo spam senza utilizzare il captcha
This entry was posted on September 7th, 2009 and is filed under XHTML, php.
Questo semplice trucchetto che presento oggi ci aiuta a prevenire gli spam bot senza utilizzare i fastidiosissimi sistemi Captcha. Il funzionamento è davvero banale e la base è il funzionamento dello spam bot. La maggior parte altro non fanno che analizzare il sorgente della pagina finchè non trovano dei campi di input, a quel punto li inondano delle loro parole senza senso o peggio ancora di link a siti pornografici e di vendita di Viagra o Cialis!
Qualche volta tra i commenti spam del mio blog o voluto cliccare i link per curiosità e nel 99% dei casi trattavano appunto di questo.
Come ho appena detto, lo spam bot analizza tutti i campi input ovviamente ignorando se essi vengano o meno visualizzati nella pagina. Proprio su questo dettaglio si incentra il trucchetto.
Basterà in effetti creare un semplice campo input con visibilità nascosta con il CSS che, se pieno, indicherà il tentativo di spamming.
La parte Xhtml e CSS sarà la seguente:
....
<style type="text/css">
.bot {display:none}
</style>
....
<form action="message.php" method="post">
<label for="mail">E-mail:</label>
<input type="text" name="mail" />
<label for="object">Oggetto:</label>
<textarea name="object" cols="40" rows="20"></textarea>
<input type="text" name="bot" class="bot" />
<input type="submit" name="submit" value="Invia" />
</form>
Mentre il codice PHP sarà:
<?php
if( isset($_POST['bot']) )
//spam bot
echo "Messaggio non inviato. Probabile spam bot";
else {
//utente reale
//...controllo consistenza dati e invio messaggio
}
?>
Il codice verifica che il campo input sia vuoto e, nel caso contrario, impedisce l’invio dei dati al server. Sicuramente non è un sistema sicurissimo al 100% però è una soluzione che garantisce già un buon livello di messaggi spazzatura evitati.














September 7, 2009 at 10:37 am
Davvero ottimo.
Sistema notevole, calcolando che il captcha da problemi di accessibilità.
Questo sistema (lo proverò quanto prima) può dare risultati davvero ottimi in termini di accessibilità.
Complimenti ottimo suggerimento
September 7, 2009 at 8:01 pm
In effetti non l’avevo visto in termini di accessibilità ma sicuramente ha i suoi vantaggi anche in questo!
September 14, 2009 at 5:32 pm
Ottimo “trucchetto” da provare sicuramente!
grazie!
October 11, 2009 at 8:04 pm
Un metodo davvero interessante, grazie!
October 11, 2009 at 11:05 pm
Ciao Famba,
benvenuto sul blog e soprattutto grazie mille per il complimento!
October 13, 2009 at 5:34 pm
Premetto: sono arrivato da un articolo di YesWebCan, ma ho ritenuto più opportuno commentare qui.
E’ decisamente un idea grandiosa, in termini di accessibilità, questa soluzione da te esposta tuttavia non consente sicurezza nella propria applicazione web.
Il captcha non serve a proteggersi solo dallo spam per il riconoscimento umano di chi naviga il sito ma anche per proteggere i propri form liberamente “esposti” da eventuali lamer a cui possiamo stare antipatici, i quali possono sfruttare questa situazione per intasarci ugualmente il db di spazzatura e, a seconda delle disponibilità hardware di quest’ultimo, anche riuscire a farci andare in down il database per sovraccarico.
Inoltre è possibile munire il captcha di un file audio associato, rendendo così ugualmente accessibile tale modulo.
Il mio intento non è quello di fare campagna al captcha, tutt’altro: invogliarvi ovvero a migliorare il metodo ideato ed in particolare per quanto riguarda il fattore “sicurezza”, in quanto penso sia ancora acerbo allo stato attuale delle cose per essere adoperato e pertanto credo che dovreste muovervi in tal senso per ultimare il funzionamento di questa tecnica al fine di riuscire a sostituire in tutto e per tutto un captcha.
Sperando in tutta serenità che il mio commento sia preso per lo spunto di riflessione/costruttività che volevo proporre e non come una critica sterile, spunto la casella di notifica per mail in quanto l’articolo è interessante e intendo seguirne eventuali sviluppi/commenti
October 13, 2009 at 5:53 pm
Ciao Blancks,
innanzitutto grazie per il commento e per aver esposto il tuo parere. In nessun caso ho preso il tuo messaggio come una critica sterile indirizzata al denigrare l’idea anzi! Le critiche costruttive sono sempre ben accette e ben viste! Senza di loro difficilmente una persona riuscirebbe a crescere per cui non preoccuparti, sei sicuramente il benvenuto!
Riguardo il contenuto del messaggio c’è però una cosa che non mi è chiara. Tu affermi che un lamer, senza l’utilizzo del captcha, potrebbe riempire il database di spazzatura e su questo niente da ridire, mi trovo in pieno accordo. Però non capisco perchè tu affermi che con tale soluzione sia differente da un comune captcha. Cerco di essere più chiaro perchè può darsi che io abbia saltato qualche passaggio o frainteso il tuo messaggio.
Supponiamo che tu abbia un blog e che mi sia particolarmente antipatico. Decido di conseguenza di voler arrecar danni al blog e incomincio con il riempirtelo di commenti spazzatura. Cosa cambierebbe se ci fosse un captcha o questa alternativa? L’uno o l’altro non bloccano tale tipologia di commenti perchè se io voglio andare fino in fondo di certo non mi fermo per 5-6 caratteri in più da riempire.
Ripeto, probabilmente sto saltando qualche particolare per cui ti chiedo di discuterne (anche in privato se vuoi) perchè sono molto interessato al tuo discorso.
Grazie mille per il tuo intervento.
October 13, 2009 at 6:05 pm
La differenza è semplice: il tuo controllo si basa sul fatto che uno spiderbot riempirebbe quel campo input che un utente non vedrebbe, ma un lamer è una persona fisica e può far si che tale campo venga ignorato dal suo malware di modo da simularsi un utente reale.
Questo gli consente di inviarti in ciclo informazioni spazzatura, mentre col captcha invece si bloccherebbe prima ancora di riuscire ad inviarti la prima delle informazioni in quanto la sequenza necessaria di caratteri per poter confermare l’invio di tali dati è stampata di su di un immagine che generalmente è di proposito costituita in maniera tale da essere difficilmente decodificabile persino da programmi OCR.
Per cui, il non poter prelevare ciclicamente questo dato gli impedisce la progettazione di un malware che possa creare sovraccarichi di informazioni al tuo database, o meglio, che riesca addirittura ad inserirvi qualcosa.
Perdonami la mia precedente ambiguità nell’espormi se v’è stata e grazie mille per il benvenuto
ps: Magari da casa ci faccio un pensierino ad aggiungerti ad un account di messagistica istantanea
October 13, 2009 at 6:19 pm
Ok ora è tutto chiaro.
Se però leggi con attenzione il titolo del post l’articolo è riferito agli “Spambot”, non considerando i lamer.
Bisogna intanto pensare che il 95% dei blog nemmeno usano il Captcha quindi si affidano esclusivamente ad Akismet (o chi per lui).Già usare questa soluzione unita ad Akismet riduce di molto la “fatica” del database.
Detto ciò non è mia intenzione ignorare il commento perchè migliorare il sistema è sicuramente qualcosa di interessante. Infatti se ci pensi un lamer in questo momento potrebbe far andare down la maggior parte dei blog visto che non usano alcun tipo di “protezione”, nemmeno il captcha.
Sarei ben felice di fare una chiacchierata con te per trovare una soluzione anche a questo altro problema. Se riuscissi a fare un pensiero ad un IM sei il benvenuto!
October 13, 2009 at 7:28 pm
In effetti Blanx ha perfettamente ragione.
Il metodo in questione blocca gli spambot ma non tiene conto di eventuali attacchi lamer.
Quindi o lasciamo che il metodo funziona solo con i bot( e già a mio avviso sarebbe ottimo) o cercare di rendere difficile la vita anche ai lamer.
Nel secondo caso sarebbe interessante trovare qualcos’altro per migliorare il primo sistema.
Si potrebbe integrare con delle regole utilizzate da Akismet.
Comunque la discussione può portare sicuramente dei miglioramenti al sistema, che a mio parere merita di essere diffuso
October 13, 2009 at 8:04 pm
Volendo applicare una pignoleria tale da far impallidire un ingegnere, l’articolo si ma il titolo non lo specifica LoL
Ad ogni modo pensavo ad una visione generica non relegata solo a chi utilizza wordpress e quindi anche per chi non può avvalersi di Akismet (senza considerare che comunque archivia sul database i commenti classificati come spam, poi non sono sufficientemente pratico di wordpress da sapere se oltre un tot c’è una routine che svuota la tabella dedicata).
Inoltre, se si vuol effettivamente estendere il sistema, come mi è parso di capire anche dall’articolo e come suggerisce YWC, sarebbe bene puntare anche al fattore sicurezza e chissà che questo metodo non possa sostituire un giorno l’utilizzo del captcha nel web: l’idea di base la trovo decisamente interessante
October 13, 2009 at 8:46 pm
@Blanx
Mi trovi completamente d’accordo.
Essendo io molto attento all’accessibilità, trovai l’idea molto interessante… potrebbe veramente puntare a sostituire il captcha.
Ti ripeto, credo che ci siano molte cose da migliorare e da valutare.
Il tuo aiuto e le tue considerazioni a me fanno piacere e sono sicuro la pensi allo stesso modo anche Simone.
Mi raccomando non abbandonare la discussione, ne può nascere qualcosa di veramente interessante
October 13, 2009 at 9:23 pm
Per pignoleria ho usato “spam” non “lamer”
Comunque anche io sono per qualcosa oltre il Wordpress e quindi oltre Akismet. Non avrebbe senso altrimenti! Piccola nota: non c’è script che pulisca il database, devi cancellarli a mano i post di spam. Per questo che prima ho detto “unito a Akismet”.
Comunque come ha anche detto YWC sono ben felice delle considerazioni e di cosa è emerso dalla discussione. C’è sicuramente da lavorarci e, ogni idea o suggerimento, sono sicuramente benvenuti!
October 14, 2009 at 12:36 am
Intanto ho preso il tuo account messenger dal footer del blog, forse qualche idea ci esce per migliorare il sistema
October 14, 2009 at 8:48 am
Perfetto!
Oggi non mi troverai che ho un esame ma da stasera possiamo sentirci tranquillamente. A dopo!