Come impedire ai robot di compilare automaticamente un modulo?


105

Sto cercando di trovare un meccanismo anti-spam sufficientemente buono per impedire l'input generato automaticamente. Ho letto che tecniche come captcha, 1 + 1 =? le cose funzionano bene, ma presentano anche un passaggio in più che impedisce l'uso rapido e gratuito dell'applicazione (non sto cercando niente del genere per favore).

Ho provato a impostare alcuni campi nascosti in tutti i miei moduli, con display: none; Tuttavia, sono certo che uno script possa essere configurato per tracciare l'ID del campo del modulo e semplicemente non riempirlo.

Implementate / conoscete un buon metodo anti robot automatico di compilazione moduli? C'è qualcosa che può essere fatto senza problemi con l'elaborazione lato server HTML E / O ed essere (quasi) a prova di proiettile? (senza JS in quanto si potrebbe semplicemente disabilitarlo).

Sto cercando di non fare affidamento sulle sessioni per questo (cioè contare quante volte un pulsante viene cliccato per evitare sovraccarichi).


5
Grazie per non volere soluzioni captcha! IMO, lo spam dei moduli è un problema per i proprietari dei siti e prevenirlo non è un peso che l'utente dovrebbe sopportare. Ci sono troppi modi alternativi per affrontare lo spam alla fine del sito, come evidenziato dalle risposte qui. I metodi che richiedono l'interazione dell'utente dovrebbero essere utilizzati solo dai pigri o dai principianti.
Mike

Risposte:


73

Un modo facile da implementare ma non infallibile (specialmente su attacchi "specifici") per risolvere l'anti-spam è tenere traccia del tempo tra l'invio del modulo e il caricamento della pagina.

I bot richiedono una pagina, analizzano la pagina e inviano il modulo. Questo è veloce.

Gli esseri umani digitano un URL, caricano la pagina, aspettano che la pagina sia completamente caricata, scorrete verso il basso, leggono il contenuto, decidono se commentare / compilare il modulo, richiedono tempo per compilare il modulo e inviare.

La differenza di tempo può essere sottile; e come tenere traccia di questo tempo senza cookie richiede un qualche modo di database lato server. Questo potrebbe avere un impatto sulle prestazioni.
Inoltre è necessario modificare il tempo di soglia.


9
Fai attenzione se desideri consentire agli utenti finali di utilizzare compilatori automatici di moduli come addons.mozilla.org/en-US/firefox/addon/1882 che possono consentire l'invio molto veloce. Oltre al captcha, qualsiasi cosa che infastidisca l'utente finale generalmente non va bene, soprattutto quando impedisce a una persona in preda a una furia di andare (molto) veloce.
fiocco di neve

1
Buon punto, ma tutto dipende dal contesto. Se il modulo è un modulo di accesso, sono completamente d'accordo con te. Ma perché disabilitare l'accesso dai bot? Se il contesto è una casella di commento, come questa su StackOverflow, lo so per certo: se utilizzi la compilazione automatica in una casella di commento, sei uno spammer. Tieni presente che se utilizzi la compilazione automatica per le firme, hai ancora bisogno di tempo per digitare effettivamente il contenuto.
Pindatjuh

5
Nota che SO fa qualcosa di simile. Modifica un commento velocemente o troppe volte di seguito e ti verrà presentato il messaggio "Sei un essere umano?" pagina.
Jakob Borg

2
Gli hacker non richiedono sempre il modulo. A volte, un URL creato con cura (utilizzando GET o POST) sarà sufficiente per pubblicare il modulo più volte con poco sforzo.
crafter

1
Implementalo con captcha. Se il modulo è stato inviato troppo velocemente, presenta un captcha per consentire agli utenti autentici di passare.
Yashovardhan99

75

In realtà trovo che un semplice campo Honey Pot funzioni bene. La maggior parte dei bot inserisce ogni campo del modulo che vede, sperando di aggirare i validatori di campo richiesti.

http://haacked.com/archive/2007/09/11/honeypot-captcha.aspx

Se crei una casella di testo, nascondila in javascript, quindi verifica che il valore sia vuoto sul server, questo elimina il 99% dei robot là fuori e non causa alcuna frustrazione al 99% dei tuoi utenti . Il restante 1% che ha javascript disabilitato vedrà ancora la casella di testo, ma puoi aggiungere un messaggio come "Lascia questo campo vuoto" per questi casi (se ti interessa).

(Inoltre, notando che se fai style = "display: none" sul campo, allora è troppo facile per un robot solo vederlo e scartare il campo, motivo per cui preferisco l'approccio javascript).


1
Pensi che i bot passino effettivamente attraverso il file css e vedano che viene visualizzato: nessuno; ? Preferisco davvero non usare una soluzione basata su JS, poiché può essere facilmente disabilitata.
Gal

1
Sembra essere una vecchia soluzione per i webmaster che include tonnellate di parole chiave non pertinenti per aumentare il loro webranking. Penso che i robot crawler di ricerca come quelli di Google possano capire che è display: nessuno. Perché altri robot non sono in grado di farlo?
fiocco di neve

2
Ho usato questa tecnica ora su due siti che venivano martellati e le iscrizioni ai bot ora sono zero 0 su entrambi. Non aiuta contro gli attacchi mirati, ma la maggior parte cerca comunque exploit o spamming.
nirvdrum

25
Piccolo punto qui: per aggirare il problema JS, usa semplicemente CSS per posizionare il tuo input honeypot sopra la parte superiore della pagina - in questo modo andrà bene avere js disabilitato e per aggirare il problema il bot dovrà essere in grado di analizzare CSS posizionamento assoluto e prendere una decisione di buon senso se si tratta di un honeypot o meno. un po 'più a prova di proiettile in questo modo :)
totalmenteNotLizards

3
@ alexy13 sì, è più semplice ma, come notato nella risposta, è anche molto più facile per un bot capire cosa stai cercando di fare, basta testare una proprietà CSS. Se, tuttavia, utilizzi la strategia di posizionamento assoluto, il bot deve analizzare tutte le tue regole di posizionamento e le regole della maggior parte dei genitori dell'elemento per essere in grado di capire se l'input sarebbe visibile o meno, e quindi capire se o non agire in base a quelle informazioni, il che è più un problema di quanto valga la pena per la maggior parte (se non tutti) i robot.
totalNotLizards

22

E se - il Bot non ne trova formaffatto?

3 esempi:

  1. Inserisci il tuo modulo usando AJAX
  • Se sei d'accordo con gli utenti che hanno JS disabilitato e non sono in grado di vedere / inviare un modulo, puoi avvisarli e fare in modo che abilitino Javascript prima usando un'istruzione noscript:
<noscript>
  <p class="error">
    ERROR: The form could not be loaded. Please enable JavaScript in your browser to fully enjoy our services.
  </p>
</noscript>
  • Crea form.htmle posiziona il tuo forminterno a<div id="formContainer"> elemento.

  • All'interno della pagina in cui devi chiamare quel form usa un vuoto <div id="dynamicForm"></div>e questo jQuery:$("#dynamicForm").load("form.html #formContainer");

  1. Crea il tuo modulo interamente usando JS

// THE FORM
var $form = $("<form/>", {
  appendTo : $("#formContainer"),
  class    : "myForm",
  submit   : AJAXSubmitForm
});

// EMAIL INPUT
$("<input/>",{
  name        : "Email", // Needed for serialization
  placeholder : "Your Email",
  appendTo    : $form,
  on          : {        // Yes, the jQuery's on() Method 
    input : function() {
      console.log( this.value );
    }
  }
});

// MESSAGE TEXTAREA
$("<textarea/>",{
  name        : "Message", // Needed for serialization
  placeholder : "Your message",
  appendTo    : $form
});

// SUBMIT BUTTON
$("<input/>",{
  type        : "submit",
  value       : "Send",
  name        : "submit",
  appendTo    : $form
});

function AJAXSubmitForm(event) {
  event.preventDefault(); // Prevent Default Form Submission
  // do AJAX instead:
  var serializedData = $(this).serialize();
  alert( serializedData );
  $.ajax({
    url: '/mail.php',
    type: "POST",
    data: serializedData,
    success: function (data) {
      // log the data sent back from PHP
      console.log( data );
    }
  });
}
.myForm input,
.myForm textarea{
  font: 14px/1 sans-serif;
  box-sizing: border-box;
  display:block;
  width:100%;
  padding: 8px;
  margin-bottom:12px;
}
.myForm textarea{
  resize: vertical;
  min-height: 120px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="formContainer"></div>

  1. Bot-escaInput per
  • Ai bot piacciono (piacciono molto ) elementi di input impertinenti come:
<input 
  type="text"
  name="email"
  id="email"
  placeholder="Your email"
  autocomplete="nope"
  tabindex="-1"
They wll be happy to enter some value such as
`dsaZusil@kddGDHsj.com`
  • Dopo aver utilizzato l'HTML sopra, puoi anche utilizzare CSS per non visualizzare l'input:
input[name=email]{ /* bait input */
  /* do not use display:none or visibility:hidden
     that will not fool the bot*/
  position:absolute;
  left:-2000px;
}
  • Ora che il tuo input non è visibile all'utente, aspettati in PHP che il tuo $_POST["email"] dovrebbe essere vuoto (senza alcun valore)! Altrimenti non inviare il modulo.
  • Infine, tutto ciò che devi fare è creare un altro input come <input name="sender" type="text" placeholder="Your email"> dopo (!) Il file "bot-esca" input per l'indirizzo effettivo utente E-mail.

Ringraziamenti:

Developer.Mozilla - Disattivazione del completamento automatico del modulo
StackOverflow - Ignora Tabindex


7
Il browser di un utente legittimo potrebbe potenzialmente vedere il campo di input dell'esca come un campo di posta elettronica e riempirlo automaticamente quando l'utente sceglie di compilare automaticamente il resto del modulo? L'utente non vedrebbe che un campo lontano dallo schermo è stato riempito e sembrerebbe comunque un bot.
wilbbe01

Sospetto autocomplete=nopeche per impostazione predefinita sarebbe on;-) MDN: input # attr-autocomplete
handle

@handle non importa, è un input per esche bot. Puoi scrivere autocomplete="oh sunny day"per quella materia.
Roko C.Buljan

19

Quello che ho fatto è utilizzare un campo nascosto e inserire il timestamp su di esso e quindi confrontarlo con il timestamp sul server utilizzando PHP.

Se era più veloce di 15 secondi (dipende da quanto grandi o piccoli sono i tuoi moduli) quello era un bot.

Spero che questo aiuto


1
Buona idea, tuttavia, impostare il limite da 3 a 5 secondi circa per consentire utenti veloci / esperti. Uso lo stesso approccio e l'impostazione di un limite sui miei moduli a 3 secondi ha filtrato il 99% dei bot.
Kayla

@adnhack Intendi qualcosa come: 1) al caricamento della pagina con php ottieni l'ora del server e crea la sessione. 2) l'utente o il bot compila il modulo, fa clic su Invia e $.postinvia tutto a un file php esterno. 3) in php esterno ottieni di nuovo l'ora del server e confrontala con l'ora della sessione?
Andris

16

Un modo molto efficace per eliminare virtualmente lo spam è disporre di un campo di testo contenente del testo come "Rimuovi questo testo per inviare il modulo!" e quel testo deve essere rimosso per inviare il modulo.

Dopo la convalida del modulo, se il campo di testo contiene il testo originale o qualsiasi testo casuale, non inviare il modulo. I bot possono leggere i nomi dei moduli e compilare automaticamente i campi Nome ed Email, ma non sanno se devono effettivamente rimuovere il testo da un determinato campo per poterlo inviare.

Ho implementato questo metodo sul nostro sito web aziendale e ha eliminato completamente lo spam che ricevevamo quotidianamente. Funziona veramente!


Interessante, sai se è più efficace delle altre risposte ... una casella di testo nascosta o che tiene traccia del tempo necessario per compilare il modulo?
Austin Henley

4
Ciò catturerebbe anche quegli utenti che non possono seguire le indicazioni, che potrebbero non essere desiderate.
wilbbe01

Mi piace questo! Fino a quando il bot non inizia a provare diverse combinazioni di campi vuoti e compilati ... il modo migliore per testare è implementarlo ed eseguire la scansione con uno di questi: sectoolmarket.com/…
nmit026

Efficace nella misura in cui la persona che gestisce il bot non scopre e modifica il codice.
Talha Awan,

11

Che ne dici di creare una casella di immissione del campo di testo dello stesso colore dello sfondo che deve rimanere vuoto. Questo aggirerà il problema del display di lettura di un bot: nessuno


2
Aggiungi questo come commento per favore quando avrai più reputazione invece di una risposta;)
Rob

3
Ciò presenta problemi di accessibilità. L'indice honeypot non verrà nascosto agli utenti con lettori di schermo.
Otterfan

5
Sono un utente non vedente e una volta ho trovato un campo modulo come questo e l'etichetta sopra diceva: "Se puoi vedere questo, lascialo vuoto". IMO molto efficace.
Parham Doustdar

8

http://recaptcha.net/

reCAPTCHA è un servizio antibot gratuito che aiuta a digitalizzare i libri

È stato acquisito da Google (nel 2009):

Vedi anche


5
Come utente trovo che recaptcha sia difficile da capire spesso. Alcune parole sono così difficili da leggere, che finisci per dover provare 3 o 4 volte. Anche se questo sicuramente aiuterà con il problema dei robot.
Brian


Mi sono trovato in questa pagina perché CAPTCHA / reCAPTCHA non interrompe attualmente l'invio del modulo bot. Questo è di 5 anni dopo ed è una tecnica nuova rispetto a quando è stata data questa risposta
JohnnyFaldo,

Sono stupito perché questa risposta non ha più voti positivi. che piaccia o meno all'utente, questa è un'ottima soluzione. Soprattutto se viene utilizzato solo per il modulo di registrazione.
towi_parallelism

In questi giorni il recaptcha inizia come una semplice casella di controllo, forse non è così doloroso come una volta? ...
rogerdpack

6

Molti di questi spam bot sono solo script lato server che si aggirano per il web. Puoi combatterne molti usando un po 'di javascript per manipolare la richiesta del modulo prima che venga inviata (cioè, impostando un campo aggiuntivo basato su qualche variabile del client). Questa non è una soluzione completa e può portare a molti problemi (ad esempio, utenti senza javascript, su dispositivi mobili, ecc.), Ma può far parte del tuo piano di attacco.

Ecco un esempio banale ...

<script>
function checkForm()
{
    // When a user submits the form, the secretField's value is changed
    $('input[name=secretField]').val('goodValueEqualsGoodClient');

    return true;
}
</script>

<form id="cheese" onsubmit="checkForm">
<input type="text" name="burger">

<!-- Check that this value isn't the default value in your php script -->
<input type="hidden" name="secretField" value="badValueEqualsBadClient">

<input type="submit">
</form>

Da qualche parte nel tuo script php ...

<?php

if ($_REQUEST['secretField'] != 'goodValueEqualsGoodClient')
{
    die('you are a bad client, go away pls.');
}

?>

Inoltre, i captcha sono ottimi e davvero la migliore difesa contro lo spam.


Grazie, anche se javascript può essere facilmente disabilitato in qualsiasi browser, annullando così il mio "meccanismo anti spam", quindi sto cercando qualcosa di più globale.
Gal

Potrei sbagliarmi, ma questo non direbbe a ogni utente con disabilità JS "sei un cattivo cliente, vattene per favore"?
Gal

Gal, è un esempio banale , che si limita a dimostrare come convalidare rispetto a una richiesta var impostata da js lato client.
John Himmelman

@John Himmelman I captcha sono risolvibili e non necessariamente la migliore difesa contro lo spam. Esistono servizi a pagamento come anti-captcha.com che risolveranno i captcha dei moduli per una tariffa bassa.

Il problema con questo approccio è che ho visto molti robot usare PhantomJS. Ciò consentirebbe loro di passare.
Parham Doustdar

4

Sono sorpreso che nessuno abbia ancora menzionato questo metodo:

  • Sulla tua pagina, includi una piccola immagine nascosta.
  • Metti un biscotto quando servi questa immagine.
  • Durante l'elaborazione dell'invio del modulo, controlla il cookie.


Professionisti:

  • conveniente per utente e sviluppatore
  • sembra essere affidabile
  • no JavaScript

Contro:

  • aggiunge una richiesta HTTP
  • richiede che i cookie siano abilitati sul client


Ad esempio, questo metodo viene utilizzato dal plugin di WordPress Cookie per i commenti .


I bot che usano cose come PhantomJS non potrebbero aggirare questo problema?
Parham Doustdar

1
Dato che è un motore browser completo, carica risorse e simili, sì, dovrebbe essere possibile. Tuttavia, non sono sicuro che venga spesso utilizzato per uno spam bot, poiché probabilmente è molto più lento degli script cURL.
Gras Double

qualsiasi motivo sarebbe meglio di un token CSRF?
xenoterracide

1
un token CSRF non fermerà affatto un bot. 1a richiesta, OTTIENI il modulo, che include il token. 2a richiesta, POST il modulo, incluso il token.
Gras Double

4

Con l'emergere di browser headless (come phantomjs) che possono emulare qualsiasi cosa, non puoi supporre che:

  • i bot spam non utilizzano javascript,
  • puoi tenere traccia degli eventi del mouse per rilevare il bot,
  • non vedranno che un campo è visivamente nascosto,
  • non aspetteranno un dato tempo prima di inviare.

Se questo era vero, non lo è più.

Se non vuoi una soluzione facile da usare, dai loro un bellissimo pulsante di invio "sono uno spammer" :

 <input type="submit" name="ignore" value="I am a spammer!" />
 <input type="image" name="accept" value="submit.png" alt="I am not a spammer" />

Ovviamente puoi giocare con due input[type=image]pulsanti immagine , cambiando l'ordine dopo ogni caricamento, le alternative di testo, il contenuto delle immagini (e la loro dimensione) o nameil pulsante dei pulsanti; che richiederà un po 'di lavoro sul server.

 <input type="image" name="random125454548" value="random125454548.png"
      alt="I perfectly understand that clicking on this link will send the
      e-mail to the expected person" />
 <input type="image" name="random125452548" value="random125452548.png"
      alt="I really want to cancel the submission of this form" />

Per motivi di accessibilità, devi inserire un'alternativa testuale corretta, ma penso che una frase lunga sia meglio per gli utenti di screen reader che essere considerati come un bot.

Nota aggiuntiva: questi esempi illustrano che comprendere l'inglese (o qualsiasi lingua) e dover fare una scelta semplice, è più difficile per uno spambot che: aspettare 10 secondi, gestire CSS o javascript, sapere che un campo è nascosto, emulare il movimento del mouse o emulazione della digitazione sulla tastiera, ...


Mi sembra che il fatto stesso che tu debba inserire il testo alternativo significhi che la tua soluzione a due immagini è altrettanto suscettibile allo scripting come le altre alternative. E per il pulsante "Non sono uno spammer": non può essere scritto anche questo?
Hawkeye

@Hawkeye La mia risposta è stata che un browser headless può emulare qualsiasi cosa : javascript, ritardi, spostamento del mouse, campi nascosti, ... Il termine "bello" prima dei miei esempi era un po '"sarcastico". Ma questi esempi illustrano che capire l'inglese e dover fare una scelta semplice è più difficile per uno spambot che: aspettare 10 secondi, gestire CSS o javascript, sapere che un campo è nascosto, emulare il movimento del mouse o emulare la digitazione sulla tastiera, ...
Adam

Adesso capisco il tuo punto. Magari aggiungi l'ultima affermazione "Ma quegli esempi illustrano ..." ecc. Alla tua risposta. Perché questo mi ha aiutato a capire cosa intendi. All'inizio sembrava essere un argomento contraddittorio secondo cui "non possiamo presumere che i bot non possano ...", ma poi elenca le cose che ancora non possiamo presumere che i bot non possano fare. Ma il punto cruciale del tuo punto è che il tuo esempio (dover fare una scelta su quale pulsante di invio) è più difficile, il che (ora che ho capito) è una risposta brillante. +1
Hawkeye

3

Un modo molto semplice è fornire alcuni campi come <textarea style="display:none;" name="input"></textarea> e scartare tutte le risposte che hanno questo compilato.

Un altro approccio consiste nel generare l'intero modulo (o solo i nomi dei campi) utilizzando Javascript; pochi bot possono eseguirlo.

Ad ogni modo, non farai molto contro i "bot" dal vivo di Taiwan o India, che vengono pagati $ 0,03 per un link pubblicato, e si guadagnano da vivere in questo modo.


2
So che questa risposta ha quasi 7 anni ma sento che vale la pena commentarla. Molti bot possono essere programmati per ignorare i campi con uno stile = "display: none" per evitare questo tipo di protezione.
Kenny Johnson,

Esistono dozzine di metodi per oscurare gli input, utilizzare Javascript, visualizzare elementi fittizi sopra di essi, spostarli fuori dall'area visibile, modellarli per fondersi perfettamente con lo sfondo o le decorazioni del layout ecc. Randomizzare (hashing) i nomi degli input (e mantenere la mappatura of hashed => original in session server-side) aiuterà contro l'uso di nomi come suggerimenti e mappare manualmente quali input sono validi. Indipendentemente da ciò, non esiste alcuna difesa contro lo spam manuale.
SF.

2

Ho un approccio semplice per fermare gli spammer che è efficace al 100%, almeno nella mia esperienza, ed evita l'uso di reCAPTCHA e approcci simili. Sono passato da quasi 100 spam al giorno su uno dei moduli html di uno dei miei siti a zero negli ultimi 5 anni una volta implementato questo approccio.

Funziona sfruttando le capacità di posta elettronica ALIAS della maggior parte degli script di gestione dei moduli html (io uso FormMail.pl), insieme a un "codice" di invio grafico, che può essere facilmente creato nel più semplice dei programmi di grafica. Uno di questi grafici include il codice M19P17nH e la richiesta "Immettere il codice a sinistra".

Questo particolare esempio utilizza una sequenza casuale di lettere e numeri, ma io tendo a utilizzare versioni non inglesi di parole familiari ai miei visitatori (ad esempio "pnofrtay"). Notare che il prompt per il campo del modulo è incorporato nell'immagine invece che apparire nel modulo. Quindi, per un robot, quel campo modulo non presenta alcun indizio sul suo scopo.

L'unico vero trucco qui è assicurarsi che il tuo modulo html assegni questo codice alla variabile "destinatario". Quindi, nel tuo programma di posta, assicurati che ciascuno di questi codici che utilizzi sia impostato come alias di posta elettronica, che punta a qualsiasi indirizzo di posta elettronica che desideri utilizzare. Poiché nel modulo non è presente alcun tipo di richiesta di lettura da parte di un robot e nessun indirizzo e-mail, non ha idea di cosa inserire nel campo vuoto del modulo. Se non inserisce nulla nel campo del modulo o altro tranne i codici accettabili, l'invio del modulo non riesce con un errore di "destinatario errato". Puoi usare una grafica diversa su forme diverse, anche se nella mia esperienza non è realmente necessaria.

Naturalmente, un essere umano può risolvere questo problema in un lampo, senza tutti i problemi associati a reCAPTCHA e schemi simili, più eleganti. Se uno spammer umano risponde all'errore del destinatario e programma il codice dell'immagine nel robot, puoi cambiarlo facilmente, una volta che ti rendi conto che il robot è stato codificato per rispondere. In cinque anni di utilizzo di questo approccio, non ho mai ricevuto spam da nessuno dei moduli su cui lo uso né ho mai ricevuto un reclamo da alcun utente umano dei moduli. Sono certo che questo potrebbe essere superato con la funzionalità OCR nel robot, ma non l'ho mai visto su nessuno dei miei siti che utilizzano moduli html. Ho anche usato "spam trap" (codice html nascosto "vieni qui" che punta alle mie politiche anti-spam) con buoni risultati, ma erano efficaci solo al 90%.


1

Sto pensando a molte cose qui:

  1. usando JS (anche se non lo vuoi) per tenere traccia del movimento del mouse, della pressione dei tasti, del clic del mouse
  2. ottenere l'URL di riferimento (che in questo caso dovrebbe essere uno dello stesso dominio) ... l'utente normale deve navigare nel sito prima di raggiungere il modulo di contatto: PHP: come ottenere l'URL di riferimento?
  3. utilizzando una variabile $ _SESSION per acquisire l'IP e controllare il modulo di invio rispetto a tale elenco di IP
  4. Compila un campo di testo con del testo fittizio che puoi controllare sul lato server se fosse stato sovrascritto
  5. Controlla la versione del browser: http://chrisschuld.com/projects/browser-php-detecting-a-users-browser-from-php.html ... È chiaro che un bot non utilizzerà un browser ma solo uno script .
  6. Usa AJAX per inviare i campi uno per uno e controlla la differenza di tempo tra gli invii
  7. Usa una pagina falsa prima / dopo il modulo, solo per inviare un altro input

Potresti approfondire alcuni di questi passaggi valicu2000? Sono ancora valide nel 2020? Grazie.
Michael Moriarty,

0

Un'altra opzione invece di scrivere lettere e numeri casuali come fanno molti siti web, è quella di creare immagini casuali di oggetti riconoscibili. Quindi chiedi all'utente di digitare di che colore è qualcosa nell'immagine o qual è l'oggetto stesso.

Tutto sommato, ogni soluzione avrà i suoi vantaggi e svantaggi. Dovrai trovare una mediana felice tra troppo difficile per gli utenti superare il meccanismo antispam e il numero di bot spam che possono passare.


Buona idea. Tuttavia, non userei il colore come criterio, in quanto ciò potrebbe escludere gli utenti daltonici
Neil Aitken

Sì, buon punto. In realtà un problema con le immagini in generale è che non sono accessibili, e rendendole "accessibili" con i tag alt, i robot possono capirle facilmente.
Brian

Le immagini sono sempre una cattiva idea ... il testo si legge a malapena, ho affrontato questo problema con altri siti web
valicu2000

Questo è solo un captcha con un tocco molto piccolo che rende più difficile per gli utenti. Inoltre non è affatto accessibile.
Mihai P.

0

I robot non possono eseguire JavaScript, quindi fai qualcosa come iniettare qualche tipo di elemento nascosto nella pagina con JavaScript e quindi rilevare la sua presenza prima dell'invio del modulo, ma fai attenzione perché alcuni dei tuoi utenti avranno anche JavaScript disabilitato

Altrimenti penso che sarai costretto a usare una forma di prova del cliente di "umanità"


4
I robot intelligenti possono eseguire javascript. Tuttavia, eseguendo una soluzione JavaScript stai bloccando il 99% dei robot
Ben Scheirman

Se il bot è un plug-in del browser, sarà in grado di eseguire javascript e vedere le cose che l'utente vede (anche se stai eseguendo un rendering flash o webgl)
CoffeDeveloper

Usa i CSS per posizionare il campo di testo sopra la pagina se sei preoccupato che le persone abbiano JavaScript disabilitato.
Chewie The Chorkie

0

La migliore soluzione che ho trovato per evitare di essere spammato dai bot è utilizzare una domanda o un campo molto banale nel modulo.

Prova ad aggiungere un campo come questo:

  • Copia "ciao" nella casella a lato
  • 1 + 1 =?
  • Copia il nome del sito web nella casella

Questi trucchi richiedono che l'utente comprenda ciò che deve essere inserito nel modulo, rendendo così molto più difficile essere l'obiettivo di una massiccia compilazione di moduli da parte dei bot.

MODIFICARE

Il rovescio della medaglia di questo metodo, come hai affermato nella tua domanda, è il passaggio aggiuntivo per l'utente per convalidare il suo modulo. Ma, secondo me, è molto più semplice di un captcha e l'overhead durante la compilazione del modulo non supera i 5 secondi, il che sembra accettabile dal punto di vista dell'utente.


Come utente, odio quella merda. Ho ricevuto che lo spam è un problema, ma come è il mio problema, come utente del sito? Lo spam nei commenti è un problema per il proprietario del sito e, in quanto tale, l'utente non dovrebbe assumersi l'onere di prevenirlo. Se entrassi in un negozio e ti chiedessero di mettere stivaletti protettivi sulle scarpe perché non volevano asciugare, quali sarebbero i tuoi pensieri allora? Ci vogliono solo pochi secondi, ma non è un tuo fardello da sopportare.
Mike

Lo spam @Miki fa perdere tempo al proprietario di un sito. Il tempo è denaro, quello che vendo ti costerà di più. Il tuo argomento può essere facilmente utilizzato per dire che "non mi interessa che tu debba pagare l'affitto, voglio pagare il costo di produzione + 1 $. Come stai pagando l'affitto il mio problema". Quando acquisti qualcosa, paghi per l'hosting, il trasporto, il tempo, ecc.
Mihai P.

@ Mike - È un tuo problema perché vuoi che il modulo funzioni (ovviamente, visto che lo stai usando). Le macchine trovano anche i siti più oscuri e inviano spam a decine di migliaia di invii al giorno, rendendo inutilizzabili quei moduli. Quindi la prossima volta che invii una domanda a una piccola impresa utilizzando un modulo sul loro sito web e devi aggiungere 9 + 3 per farlo ... e chiediti "perché devo farlo?" la tua risposta può essere "perché in realtà voglio una risposta alla mia domanda".
Jimbo Jonny

@JimboJonny Hai completamente perso il mio punto. Lo spam è un problema (come ho affermato), ma ci sono modi per risolverlo sul back-end che non contaminano l'esperienza dell'utente. Al momento ho moduli di contatto distribuiti su dozzine (centinaia, addirittura) di siti Web e lo spam è minimo (pochi messaggi di spam al mese, per modulo) perché ho affrontato lo spam in modo programmatico, non facendo saltare gli utenti attraverso i cerchi. Il punto non era che lo spam non fosse un problema; è un problema. Il punto era che ci sono modi per affrontarlo senza confondere con l'esperienza dell'utente.
Mike

@JimboJonny Caso in questione, guarda le risposte più alte (e accettate) su questa domanda. Nessuno coinvolge alcun tipo di input dell'utente. È così che dovrebbe essere la mitigazione dello spam.
Mike

0

C'è un tutorial su questo sul sito JQuery. Sebbene sia JQuery l'idea è indipendente dal framework.

Se JavaScript non è disponibile, potrebbe essere necessario tornare all'approccio di tipo CAPTCHA.


0

il modo più semplice che ho trovato per farlo è inserire un campo con un valore e chiedere all'utente di rimuovere il testo in questo campo. poiché i bot li riempiono solo. se il campo non è vuoto significa che l'utente non è umano e non verrà pubblicato. è lo stesso scopo di un codice captcha.


0

È solo un'idea, l'ho usata nella mia applicazione e funziona bene

puoi creare un cookie sul movimento del mouse con javascript o jquery e sul lato server controllare se il cookie esiste, perché solo gli umani hanno il mouse, il cookie può essere creato solo da loro il cookie può essere un timestamp o un token che può essere convalidato


Idea interessante! L'hai mai usato nel mondo reale?
skybonds o

Non funzionerà. In questi giorni gli spammer utilizzano software che viene eseguito nel browser. In questo modo possono imitare l'esperienza dell'utente che crea il cookie e quindi eseguirlo un numero x di volte utilizzando contenuti diversi generati dal software.
Norbert Norbertson

Questo non funzionerebbe se l'utente non stesse usando un mouse. Se il modulo è impostato correttamente, l'utente dovrebbe essere in grado di compilare l'intero modulo utilizzando la tastiera. È possibile passare ai campi successivi, utilizzare la barra spaziatrice per selezionare i pulsanti di opzione e utilizzare la barra spaziatrice (o invio) quando si seleziona il pulsante di invio.
Kenny Johnson,

0

Usa 1) modulo con token 2) Verifica modulo per modulo ritardo con indirizzo IP 3) Blocca IP (opzionale)


0

Nella mia esperienza, se il modulo è solo un modulo di "contatto" non sono necessarie misure speciali. Lo spam viene filtrato in modo decente dai servizi di webmail (puoi tenere traccia delle richieste di moduli web tramite script del server per vedere cosa raggiunge efficacemente la tua email, ovviamente presumo che tu abbia un buon servizio di webmail: D)

A proposito, sto cercando di non fare affidamento sulle sessioni per questo (come contare quante volte viene fatto clic su un pulsante per evitare sovraccarichi).

Non credo sia una buona cosa, anzi quello che voglio ottenere è ricevere email da utenti che compiono un'azione particolare perché quelli sono gli utenti a cui sono interessato (ad esempio gli utenti che hanno guardato la pagina "CV" e hanno utilizzato il contatto appropriato modulo). Quindi, se l'utente fa qualcosa che voglio, inizio a tracciare la sua sessione e imposto un cookie (imposto sempre un cookie di sessione, ma quando non avvio una sessione è solo un falso cookie fatto per credere che l'utente abbia una sessione). Se l'utente fa qualcosa di indesiderato, non mi preoccupo di tenere una sessione per lui, quindi nessun sovraccarico ecc.

Inoltre, sarebbe bello per me che i servizi pubblicitari offrissero una sorta di API (forse che esiste già) per vedere se l'utente "ha guardato l'annuncio", è probabile che gli utenti che guardano gli annunci siano utenti reali, ma se non lo sono davvero bene almeno ottieni 1 vista comunque, quindi niente perdita. (e credimi, i controlli degli annunci sono più sofisticati di qualsiasi cosa tu possa fare da solo)


0

In realtà la trappola con display: nessuna funziona come un incantesimo. Aiuta a spostare la dichiarazione CSS in un file contenente qualsiasi foglio di stile globale, il che costringerebbe i bot di spam a caricare anche quelli (una dichiarazione di stile diretto = "display: none;" potrebbe essere probabilmente interpretata da uno spam bot, così come una dichiarazione di stile locale all'interno del documento stesso).

Questo combinato con altre contromisure dovrebbe rendere discutibile per qualsiasi bot spam scaricare la propria spazzatura (ho un libro degli ospiti protetto con una varietà di misure, e finora sono caduti nelle mie trappole primarie, tuttavia, se un bot le aggira, lì sono altri pronti per l'attivazione).

Quello che sto usando è una combinazione di campi modulo falsi (descritti anche come campi non validi nel caso in cui venga utilizzato un browser che non gestisce CSS in generale o non viene visualizzato: nessuno in particolare), controlli di integrità (ovvero è il formato dell'input valido?), timestamp (invii sia troppo veloci che troppo lenti), MySQL (per l'implementazione di blacklist basate su e-mail e indirizzi IP e filtri flood), DNSBL (ad esempio SBL + XBL di Spamhaus), analisi del testo ( ad es. parole che sono una forte indicazione di spam) e e-mail di verifica (per determinare se l'indirizzo e-mail fornito è valido o meno).

Una nota sulle e-mail di verifica: questo passaggio è del tutto facoltativo, ma quando si sceglie di implementarlo, questo processo deve essere il più facile da usare possibile (ovvero, dovrebbe ridursi al clic su un collegamento contenuto nell'e-mail ) e far sì che l'indirizzo e-mail in questione venga inserito nella whitelist per un certo periodo di tempo in modo da evitare successive verifiche nel caso in cui l'utente desideri effettuare ulteriori post.


0
  1. Uso un metodo in cui è presente una casella di testo nascosta. Poiché i bot analizzano il sito Web, probabilmente lo riempiono. Quindi controllo se è vuoto se non è il sito web ritorna.

  2. Aggiungi verifica e-mail. L'utente riceve un'e-mail e deve fare clic su un collegamento. Altrimenti scarta il post tra un po 'di tempo.


0

Ho aggiunto un controllo orario ai miei moduli. I moduli non verranno inviati se compilati in meno di 3 secondi e questo ha funzionato benissimo per me soprattutto per i moduli lunghi. Ecco la funzione di controllo del modulo che chiamo sul pulsante di invio

function formCheck(){
var timeStart; 
var timediff;

$("input").bind('click keyup', function () {
    timeStart = new Date().getTime();          
}); 
 timediff= Math.round((new Date().getTime() - timeStart)/1000);

  if(timediff < 3) { 
    //throw a warning or don't submit the form 
  } 
  else submit(); // some submit function

}

0

Con bot di spam sempre più sofisticati e tecniche come i browser automatici, diventerà più difficile determinare l'origine dello spam. Ma se pubblicato da un software, da un essere umano o da entrambi, lo spam è spam a causa del suo contenuto. Penso che la soluzione migliore sia eseguire il contenuto pubblicato tramite un'API anti-spam come Cleantalk o Akismet. È relativamente economico ed efficace e non disturba l'utente. Puoi controllare i tempi di invio del modulo e gli altri controlli tradizionali per bot meno sofisticati prima di colpire l'API.


Per curiosità, qual è la tua sensazione su reCAPTCHA? Sei il primo a menzionare altri servizi a pagamento, ma come si confrontano con reCAPTCHA e / o perché consiglieresti quelli OLTRE il servizio gratuito?
Hawkeye

0

Puoi provare a ingannare i robot spam aggiungendo l'attributo di azione corretto dopo la convalida Javascript. Se il robot blocca Javascript non potrà mai inviare correttamente il modulo.

HTML

<form id="form01" action="false-action.php">
    //your inputs
    <button>SUBMIT</button>
</form>

JAVASCRIPT

$('#form01 button').click(function(){

   //your Validations and if everything is ok: 

    $('#form01').attr('action', 'correct-action.php').on("load",function(){
        document.getElementById('form01').submit()
    });
})

Quindi aggiungo un "callback" dopo .attr () per evitare errori.


-1

Solo i miei cinque centesimi. Se l'obiettivo di questo è fermare il 99% dei robot che suona abbastanza bene, e se il 99% dei robot non può eseguire Java-script, la soluzione migliore che batte tutto è semplicemente quella di non utilizzare un modulo che ha un'azione di invio con un post URL.

Se il modulo è controllato tramite java-script e java-script raccoglie i dati del modulo e quindi lo invia tramite una richiesta HTTP, nessun robot può inviare il modulo. Poiché il pulsante di invio utilizza lo script Java per eseguire il codice che invia il modulo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.