2012-01-15 12 views
12

Ho letto sull'aggiunta di campi di miele Honey ai miei moduli per la lotta a bot/spam. L'unico problema è che non ci sono guide o nulla su dove iniziare. Molti siti dicono di creare un campo nascosto che riempirebbe solo il bot dello spam. Ma visto che sono nuovo, non so da dove iniziare nella mia applicazione. Qualcuno potrebbe darmi il consiglio su come impostare questo? Sto cercando di fare in modo che la mia pagina di registrazione di Devise utilizzi i campi di miele.Come si aggiungono i campi del Miele ai miei moduli?

+0

Basta aggiungere un campo nascosto e controllare per esso su presentazione; Non sono sicuro di quale sia la confusione. –

+4

Per "nascosto" significa * non visibile sullo schermo * non ''. Più qualcosa come 'visiblity: hidden;' o qualsiasi altro tipo di trucco css che rende invisibile l'input. –

+0

Correlati: [Migliore implementazione Honeypot (Form Anti-Spam)] (http://stackoverflow.com/questions/36227376/better-honeypot-implementation-form-anti-spam/36227377) –

risposta

18

L'idea di base dei captcha honeypot è che si dispone di un campo nascosto (tramite CSS) chiamato qualcosa come "form" o "email" o "contenuto" che (in un bot che legge il nome del campo) sembra che dovrebbe essere compilati. Quindi, quando il server controlla l'invio, si assicura che questi campi nascosti siano vuoti. Se non lo sono, allora contrassegni il post come un bot.

Here's a well explained example (con un po 'di codice in ASP), e here's a Rails Gem that provides honeypot captchas.

Che Rails Gem ho collegato sembra che sia molto facile da usare, una volta installato:

<% form_tag comments_path, :honeypot => true do -%> 
    ... 
    <% end -%> 

Anche se siete interessati a conoscere la approccio piuttosto che solo averlo implementato, ti consiglierei di fare da te. Se stai ruotando il tuo, è importante assicurarsi che il campo sia nascosto da CSS (o qualche altro trucco stile/posizionamento) e non da input type="hidden" - altrimenti il ​​bot potrebbe non riempire il campo.

Come ha sottolineato Michael Mior nei commenti, è importante avere un messaggio accanto al campo nascosto che dice all'utente di lasciarlo in bianco - altrimenti gli utenti con screen reader potrebbero erroneamente riempirlo. Questa funzione non è presente nella gemma Mi sono collegato a, quindi se stai creando un sito web accessibile (che quasi sicuramente dovrebbe essere) potresti doverlo modificare o eseguire il rollover.


Tenete a mente che questo trucco non è infallibile - non c'è niente di fermare un bot dal rendering della pagina e determinare quali campi sono in realtà visibili per l'utente prima di riempire qualsiasi in -, ma quel tipo di bot sarebbe considerevolmente più complesso di uno che ha appena guardato il modulo html. Un captcha honeypot rischia di essere molto efficace nell'arrestare bot semplici.

+2

Si noti che la gemma a cui si fa riferimento ha alcuni problemi di accessibilità. È importante avere un messaggio che dice all'utente di lasciare il campo vuoto. Questo può essere nascosto insieme al campo del modulo, ma garantisce che le persone che utilizzano gli screen reader siano in grado di lasciare correttamente il campo vuoto. –

+0

@MichaelMior Buon punto. C'è un gioiello migliore a cui dovrei collegarmi? –

+0

Quindi se dovessi rotolare da solo. Comincio facendo un attributo virtuale e poi un metodo che afferma che dovrebbe essere lasciato in bianco, e anche nasconderlo dallo schermo con posizionamento assoluto -9999? – LearningRoR

-7

e questo è il mio vaso di miele:

<input id="email" name="emails" style="border:none"></br> 

Se siete ancora paranoico con questo, provare un po 'di approccio: utilizzare Javascript per sgombrare il campo una volta utente erroneamente compilato il valore e concentrarsi sulla prossima casella di testo. Puoi anche chiedere all'utente di fare una semplice matematica come rispondere: 1 + 2 =?

+3

Hai considerato "display: none"? –

+5

Non mi piace il bordo: nessuno perché il campo è ancora selezionabile nell'interfaccia utente. Inoltre, potrebbe ancora apparire perché lo sfondo dell'elemento contenitore è diverso dall'input. Questo non impedisce all'elemento di essere visibile. Inoltre,
non è HTML e non fa nulla in XHTML. –

0
<div id="honeypotdiv"> 
If you see this, leave it blank. Only bots should see this 
<input type="text" name="body" value="" /> 
</div> 
+1

Questa risposta si è verificata nella coda di recensioni di bassa qualità, presumibilmente perché non hai spiegato il codice. Se lo spieghi (nella tua risposta), hai molte più probabilità di ottenere più upvotes - e l'intervistatore è più propenso ad imparare qualcosa! –

1
HTML - 
<input type="text" name="verifyEmail" id="verifyEmail"> 

PHP Validation - 
if(strlen($_POST['verifyEmail']) > 0){ 
    header('location: {some redirect URL here..}'); //Send them way away from your form :) 
die(); //Stop execution of the script 
} 

CSS - 
#verifyEmail{ 
position:fixed; 
visibility: hidden; 
top:-500px; left:-500px; 
} 

dislplay: none; non mostra ad un bot in HTML (provare con visualizza sorgente) visibility: hidden; left:-500px; top:-500px; (viene visualizzata quando si visualizza sorgente)

ho usato visualizzazione: vasi di nessuno di miele per un po ', poi passò all'opzione di visibilità quando mi venne in mente che il campo non era mostrato nel codice sorgente. Fallo con una classe o un id in CSS, non in stile inline. Informare gli utenti con l'etichetta è una buona idea, e il nome non è così importante perché la maggior parte dei bot in genere riempie tutti i campi.

Sicuramente non è un trucco tutto ma molto efficace se utilizzato con un captcha matematico di base.

1

Prova invisible_captcha (supporta Rails 3, 4 e 5).

Funziona piuttosto bene per siti di piccole e medie (in termini di traffico), con un approccio semplice e flessibile. Fornisce anche presentazioni sensibili al tempo.

Utilizzo base

Nel modulo:

<%= form_for(@topic) %> 
    <%= invisible_captcha %> 
    ... 
<% end %> 

nel controller:

class TopicsController < ApplicationController 
    invisible_captcha only: [:create, :update] 
    ... 
end 
Problemi correlati