2009-08-02 10 views
6

Attualmente sto lavorando su un piccolo sito di chat/forum che ho sbrogliato in un fine settimana e contiene voci anonime (ad esempio, nessun nome utente o password). Sembra che potrebbe essere facile far schifo a uno spammer, ma non voglio infastidire l'utente con captchas o simili input anti-spam.Blocco dello spam in un sito PHP senza disturbare l'utente

Esistono alternative invisibili all'utente? Grazie per l'aiuto.

risposta

6

Non una soluzione a prova di bomba, ma è possibile avere alcuni campi di input nascosti. Se quelli non sono lasciati vuoti, hai preso un bot. I bot tendono a riempire tutti i campi di input, mentre gli utenti sicuramente lasceranno i campi che non vedono vuoti.

+1

Per chiarire, i campi di input "nascosti" devono essere nascosti da CSS (foglio di stile, non stile inline) o, meglio ancora, javascript (anche se solo javascript è già una parte necessaria del sito). Fare 'input type = hidden' non ha intenzione di seguire bot. – ChssPly76

+1

Solo per riferimento, questa tecnica è chiamata honeypot. – cletus

+0

Non credo che ingannare i robot. Puoi facilmente usare JS per verificare se un campo è nascosto o meno (anche se è stato nascosto dai CSS). Inoltre, supponi che tutti i campi vengano riempiti da bot, quindi questo non ti protegge dai bot che ne riempiono solo alcuni. – RaYell

0

L'idea dei capcha è che sono molto facili da passare per gli umani ma molto difficili da evitare per i robot ecc. Se non vuoi questo tipo di soluzione, cosa impedirà ai robot spam di pubblicare sul tuo sito?

È come se si desidera proteggere il computer ma non si desidera utilizzare un antivirus e un firewall.

Penso che potresti creare una sessione per ogni utente che entra nel tuo sito e la prima volta che vogliono pubblicare qualcosa mostra loro il capcha (non è necessario accedere, basta passare capcha). Se lo passano, basta memorizzare una bandiera in sessione che sono umani. Finché hanno aperto il browser, possono pubblicare e rispondere sul tuo sito ciò che vogliono. È improbabile che i robot superino questo primo test.

0

Esistono due classi di protezione anti-spam.

Il primo è rendere difficile per i robot automatici inciampare nel tuo sito. Il metodo del campo modulo nascosto viene spesso citato per questo ed è adatto per siti a basso traffico. Queste protezioni possono essere banalmente sconfitte da un bot antispam scritto per il tuo sito. Tuttavia, se sei un bersaglio troppo piccolo, questo non succederà.

Il secondo è i tipi "fastidiosi". Questo di solito comporta una captcha, registrazione o e-mail di conferma della posta. Puoi usare alcuni approcci per renderlo meno fastidioso, ma richiede molto più sforzo da parte del bot per pubblicare spam.

Si noti che entrambi questi approcci possono spesso impedire utenti disabili e mobili.

2

Questo ha funzionato al 100% del tempo per me:

<input type="text" style="display:none" name="email" value="do not fill this in it is for spam catching" /> 

Poi lato server (PHP):

if($_POST['email'] != 'do not fill this in it is for spam catching') { 
    // spam 
} 

Come accennato in precedenza, la maggior parte dei bot riempiono tutto, specialmente ingressi denominati " e-mail".

+0

Possono essere abbastanza intelligenti da non riempire gli ingressi precompilati. Meglio lasciarlo in bianco secondo me. – MitMaro

+0

Ottimo punto. Funziona perfettamente per il momento sui miei siti. Se (quando) arriva il giorno in cui i robot superano in astuzia questo metodo, cercherò qualcos'altro, naturalmente. Lascio lì dentro per l'accessibilità. –

8

Una cosa che dovresti sapere sugli spammer è che vanno sempre per il frutto basso. Lo stesso con gli hacker. Con questo voglio dire che sceglieranno i bersagli più facili da colpire che riguardano il maggior numero di utenti. Questo è il motivo per cui le vulnerabilità di PHP e Windows sono spesso sfruttate: colpiscono così tanti utenti che se trovi una tale debolezza/exploit il tuo "mercato" di destinazione è enorme.

È anche una grande parte del motivo per cui Linux e Mac OS rimangono relativamente incolumi dai virus, ad esempio: il mercato di destinazione è molto più piccolo di Windows rispetto a. Ora non sto equiparando la sicurezza e la solidità di Windows con Mac/Linux, ma anche se il modello di sicurezza di questi ultimi due è molto meglio il numero di attacchi contro il primo è ancora sproporzionato rispetto alle carenze che ha.

Dico questo perché uno dei modi migliori per evitare questo tipo di problemi è di non usare softare popolare. phpBB ad esempio ha subito molti attacchi contro di esso solo perché è così popolare.

Così facendo il tuo sistema di chat/forum sei in svantaggio perché hai un sistema che non ha il test sul campo qualcosa di popolare ma hai anche un vantaggio in quanto non vale più il tempo dello spammer per sfruttarlo. Quindi quello che devi fare attenzione è ciò che possono fare i sistemi automatici contro di te. I moduli di contatto sui siti Web tendono ad avere indicatori riconoscibili (come nome, e-mail e campi di commento).

quindi consiglierei:

  • Ignorando risposte che rientrano dicono 5-10 secondi di invio del modulo per l'utente;
  • Utilizzando un honeypot (CSS/JS campi nascosti, come descritto altrove);
  • Utilizzo di Javascript ove applicabile per il rendering, il riordino o la visualizzazione del modulo;
  • Utilizzo di nomi di campi modulo non prevedibili; e
  • Limitazione delle risposte errate tramite IP.
+1

Penso che una combinazione delle difese honeypot e timer sarebbe un buon inizio. Come implementare un timer? – SpleenTea

Problemi correlati