2009-10-16 9 views
52

Quali sono alcuni metodi non-captcha per bloccare lo spam sui miei commenti?Blocco dello spam nei commenti senza usare il captcha

+0

e dovrebbe essere necessario un semplice script captcha: http://thephpcode.blogspot.com/2009/07/php-gd-creating-security-captcha-in-php.html – mauris

+3

@Mauris, Non-captcha, che è captcha. – Malfist

+0

im sober =) nel caso in cui il richiedente ne abbia bisogno. – mauris

risposta

13

1) Aggiunta di informazioni di sessione relative nel modulo Esempio:

<input type="hidden" name="sh" value="<?php echo dechex(crc32(session_id())); ?>" /> 

poi postback, verificare se sessione è valido o meno.

2) Solo Javascript. Usa l'iniezione di Javascript all'Invio. Esempio:

<input type="hidden" id="txtKey" name="key" value="" /> 
<input type="submit" value="Go" onclick="document.getElementById('txtKey').value = '<?php echo dechex(crc32(session_id())) ?>';" /> 

3) Termine per IP, utente o sessione. questo è abbastanza semplice.

4) randomizzazione nomi dei campi:

<?php 
    $fieldkey = dechex(crc32(mt_rand().dechex(crc32(time())))); 
    $_SESSION['fieldkey'] = $fieldkey; 
?> 
<input type="text" name="name<?php echo $fieldkey; ?>" value="" /> 
<input type="text" name="address<?php echo $fieldkey; ?>" value="" /> 

allora potete controllare sopra al lato server.

+6

Nella mia esperienza, 1) e 3) completamente inefficace poiché i robot mny si comportano come normali utenti per quanto riguarda le sessioni e richiedono JavaScript per le funzionalità di base è inaccettabile. –

+9

@michael: il tuo atteggiamento anti-javascript è antiquato.Meno del 5% di tutti gli utenti ha la sua javascript disattivata. E se ce l'hai, allora è colpa tua. Inoltre, metti un avvertimento senza sceneggiatura a queste persone che non possono presentare. –

+7

Javascript è al giorno d'oggi la fonte numero 1 di infezione da virus, botnet e quindi, in definitiva, spam. Se lo hai indiscriminatamente, o lo richiedi per funzionalità di base. allora sei parte del problema. –

1

Non consentire collegamenti. Senza collegamenti, lo spam è inutile.

[MODIFICA] Come metodo intermedio, consente solo collegamenti a siti "buoni" (di solito i propri). Ne esistono solo una manciata, quindi puoi aggiungerli su richiesta dei tuoi utenti o tenere un commento fino a quando non avrai verificato il link. Quando è buono, aggiungilo.

Dopo un po ', è possibile disattivarlo e rifiutare automaticamente i commenti con i collegamenti e attendere che gli utenti si lamentino.

+1

questo non funziona a meno che non si scartano tutti i post contenenti collegamenti, il che significa che a volte gli utenti validi perdono i loro post senza un motivo apparente. se rimuovi i link ma permetti il ​​testo probabilmente continuerai a ricevere spam (almeno questa è stata la mia esperienza) – Kip

+0

-1, come sarebbe stato efficace? – Malfist

+1

I collegamenti sono quasi l'unica ragione per cui esiste lo spam di commenti automatici. Disabilitando i post che contengono collegamenti, ti accorgerai vicino al 100% di tutto lo spam. Non devi ingoiarli neanche in silenzio; visualizza un messaggio di errore esplicito "scusa, nessun collegamento consentito nei commenti". Ma ancora, rende i commenti meno utili. I bot –

1

Si potrebbe provare a guardare con una terza parte come Akismet. Le chiavi API sono gratuite per uso personale. Inoltre, The Zend Framework ha un package per questo.

1

maggior parte dei bot è sufficiente compilare l'intero modulo e inviarlo a voi . Un semplice trucco che funziona è creare un campo normale che solitamente si nasconde con l'aiuto di javascript. Sul lato server, controlla solo se questo campo è stato compilato. Se è così, allora è sicuramente spam.

+8

nascondendo il campo con l'aiuto di CSS sarebbe meglio ... allora anche gli utenti non JS non lo vedrebbero. – Kip

58

Nella mia esperienza i metodi attualmente più efficaci sono campi di input honeypot che vengono resi invisibili agli utenti tramite CSS (meglio utilizzare metodi diversi, come ad esempio visibility: hidden, impostando una dimensione di 0 pixel e posizionamento assoluto molto al di fuori della finestra del browser); se sono riempiti comunque, puoi presumere che sia uno spambot.

This blog descrive un metodo piuttosto complesso che ho provato io stesso (con il 100% di successo finora), ma ho il sospetto che si possa ottenere lo stesso risultato saltando tutte le cose con i nomi dei campi hash e aggiungendo semplicemente alcuni campi honeypot.

+0

+1 questo ha funzionato anche sul mio blog, soprattutto. di tanto in tanto ci sarà uno spammer che si sottopone a * ogni * modulo sulla pagina anche se ... – Kip

+8

+1. Molto bello Mi piace anche l'idea del limite di tempo. Se un "utente" invia un commento 74 millisecondi dopo aver richiesto la pagina, allora sai che qualcosa sta succedendo. –

+0

@Steve - sì, ma sfortunatamente è troppo facile per gli spambots sconfiggere. –

0

Sul mio blog, ho una sorta di captcha di compromesso: utilizzo solo un captcha se il post contiene un collegamento. Uso anche un campo di input honeypot. Finora, questo è stato quasi efficace al 100%. Ogni tanto ci sarà uno spammer che invia qualcosa ad ogni forma che non contiene collegamenti (di solito qualcosa come "bel sito!"). Posso solo supporre che queste persone pensano che manderò una e-mail per scoprire chi sono (usando l'indirizzo e-mail che vedo solo io).

+0

Se si sottomettono a ogni forma, non è possibile determinarlo come spam a causa della presenza di testo nel contenitore del miele? Nessuno tranne un bot pubblicherà lì, quindi se ha qualche contenuto = spam. (un caso limite: riempimento automatico) – RyanS

+1

@RyanS: Ho scritto questo quasi quattro anni fa, quindi non ne sono sicuro, ma io * penso * Intendevo che qualcuno si sottomettesse a ogni modulo visibile sullo schermo, senza compilare il campo honeypot. – Kip

3

Un altro approccio comune è quello di fornire all'utente una semplice domanda ("è fuoco caldo o freddo?" "Cosa è 2 più 7?" Ecc.). È un piccolo captcha- come, ma è più accessibile agli utenti con disabilità visive che utilizzano screen reader. Penso che ci debba essere un plugin per WordPress che lo fa, perché lo vedo molto spesso sui blog di WordPress.

1

Come molte persone hanno già proposto: utilizzare un campo di immissione del vaso di miele. Ma ci sono altre due cose che devi fare. In primo luogo, randomizzare il nome/id di quale campo di input è il vaso del miele. Memorizza lo stato dei campi utili in sessione (così come un token modulo, usato contro gli attacchi CSRF). Per esempio, hai questi campi per ottenere: nome, email, messaggio. Nel tuo modulo, avrai il token che è il tuo token, "jzefkl46" che è il nome per questo modulo, "ofdizhae" per email, "45sd4s2" per il messaggio e "fgdfg5qsd4" per il vaso del miele. Nella sessione utente, si può avere qualcosa di simile

 
array("forms" => array("your-token-value" => array("jzefkl46" => "name", 
                "ofdizhae" => "email", 
                "45sd4s2" => "message", 
                "fgdfg5qsd4" => honey"));

Non vi resta che associare nuovamente indietro quando si ottiene i dati del modulo.

In secondo luogo, poiché il robot ha molte possibilità di evitare il campo di miele (25% di probabilità), moltiplica il numero di vasi. Con 10 o 20 di questi, si aggiungono difficoltà ai robot senza avere troppo overhead nel proprio html.

+0

nella mia esperienza, la maggior parte degli spambots si sottopone ciecamente al primo modulo sulla pagina. alcuni si sottomettono ad ogni forma. non ne ho mai notato uno a caso (anche se sono sicuro che ce ne siano alcuni) – Kip

+1

Certo, al momento non selezionano casualmente perché non molte persone usano il metodo del vaso di miele. Ma dagli 2 o 3 anni e alcuni lo faranno. Andiamo un po 'più avanti dei bot mentre è possibile. – Arkh

+0

Non capisco bene quali forme multiple debbano fare con gli honeypot, ma il post del blog che ho collegato descrive come puoi randomizzare nomi di campi * senza * aver bisogno di una sessione. Tuttavia, sospetto che questo sforzo extra venga sprecato: i bot semplici in questo momento andranno per i campi honeypot con nomi non casuali (o qualcuno ha dati che contraddicono questo?), E se sono costretti a diventare più sofisticati, non sarebbe poi così difficile analizzare la struttura della pagina lessicale e usarla per decidere quali campi compilare e quali saltare. –

0

insieme con l'utilizzo di campi di miele, possiamo vietare l'IP automaticamente (che non funziona per gli IP dinamici) e in particolare tutti i collegamenti postati dai bot.

0

Akismet è una buona alternativa, controlla i tuoi messaggi per spam e funziona in modo molto efficiente. Hai solo bisogno di caricare il loro librabry. http://akismet.com/development/

1

ho ridotto di circa il 99% dello spam sul mio sito web tramite una semplice domanda matematica come la seguente:

Che cosa è 2 + 4 [TextBox]

L'utente sarà in grado di presentare il domanda/commento se rispondono "6".

Lavori per me e soluzioni simili funzionano per Jeff Atwood di Coding Horror!

0

cassa alcuni plugin wp antispam per gli esempi e le idee

ci sono molti bei antispam senza usare captcha.

alcuni consiglierei: hashcash, nospamnx, typep antispam. tutti questi utilizzando diversi metodi di blocco dello spam e io li uso tutti. hashcash + nospamnx blocca quasi tutti gli spambot.e blocco antispam del typepad più spam tipizzato umano.

questi sono anche quelli buoni: SpamBam, wp-SpamFree, anti-captcha, bad-comportamentali, httpbl, ecc

anche con una semplice .htaccess che bloccano qualsiasi POST diretta bot che non provengono dal tuo sito (controlla il referente)

oppure, semplicemente esternalizzare il sistema di commenti per smettere e dormire bene.

2

Sblam! è un filtro open source simile a Akismet.

Utilizza il filtro bayesiano naive, controlla l'IP del mittente ei collegamenti in più blacklist distribuite, controlla la correttezza delle richieste HTTP e utilizza la presenza di JS come suggerimento (ma non come requisito).

2

I CAPTCHA regolari sono ora risolvibili con lo spam bot.

Considerare invece "text CAPTCHAs": una domanda logica o di conoscenza comune, come "Che cos'è 1 + 1?" o "Di che colore è il cavallo bianco del generale Custard?" La domanda può anche essere statica (stessa domanda per ogni tentativo).

Text Logic CAPTCHA

(Taken from http://matthewhutchinson.net/2010/4/21/actsastextcaptcha)

penso Jeff Atwood utilizza anche una convalida come questo sul suo blog. (Correggetemi se sbaglio)

Alcune risorse:

5

Questo è semplice trucco per bloccare lo spam b o attacco di forza bruta senza usare captcha.

mettere questo nel modulo:

<input type="hidden" name="hash" value="<?php echo md5($secret_key.time()).','.time(); ?>" /> 

mettere questo nel codice php

$human_typing_time = 5;/** page load (1s) + submit (1s) + typing time (3s) */ 
$vars = explode(',', $_POST['hash']); 
if(md5($secret_key.$vars[1]) != $vars[0] || time() < $var[1] + $human_typing_time){ 
    //bot? 
    exit(); 
} 

secondo il peso del modulo è possibile aumentare o diminuire $ human_typing_time.

+2

Puoi spiegarmi cos'è $ secret_key? E penso che tu abbia un refuso alla volta() <$ var [1] Penso che dovrebbe essere $ vars. – nmsdvid

Problemi correlati