Human vs Bot: captcha o altro?

In questi giorni mi sono chiesto se il catpcha fosse veramente la soluzione al problema Bot per SocialCibus. Così mi sono letto diversi articoli in rete. Alcuni di questi parlavano di un 3-10% di utenti che, quando vedono un captcha, lasciano perdere la registrazione, altri abbandonano solo dopo aver sbagliato una o due volte l’inserimento del testo.
Posso tenere fuori i bot e dentro gli esseri umani senza captcha? E’ la domanda che si sono posti in tanti.

Di risposte ce ne sono diverse ma a me è piaciuta questa soluzione: inserire un campo di testo in più nel form, nascondendolo con css o javascipt e verificare che questo rimanga vuoto.
Il trucco è che i bot normalmente non visualizzano la pagina e sono ingolositi da campi di testo che tendono a riempire in maniera casuale o inserendo js.
Quindi se sei un bot probabilmente riempirai il campo, se sei un umano sicuramente no, visto che è nascosto!

Per Symfony è piuttosto semplice implementare questo sistema. Nel form si aggiunge un campo di testo, es:

$this->widgetSchema['message'] = new sfWidgetFormInputText();
$this->validatorSchema['message'] = new EmptyValidator(array('required' => false));

e un metodo che mi verifichi se l’errore è in questo campo

public function isBot() {
  return !$this->isValid() && $this->errorSchema['message'] instanceof sfValidatorError;
}

quindi nell’action

  public function executeRegistration(sfWebRequest $request)
  {
    $this->form = new RegistrationForm();

    if ($request->isMethod('POST'))
    {
      $this->form->bind($request->getParameter($this->form->getName()));
      if ($this->form->isBot())
      {
        $this->forward404();
      }
      if ($this->form->isValid())
      {
        // tutto ok, procedi!
      }
    }
  }

Anche il 404 sembra sia un modo per scoraggiare i bot.
Aggiornerò al più presto con le statistiche di funzionamento di questo sistema.

Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedInEmail this to someone
Written by kea

Leave a Reply

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *