EUCOOKIELAW_BANNER_TITLE

  • I think that

    Making the Web is like playing a game. Standard, Accessibility and Usability are only few rules.
    No game is awesome if you don't follow the rules.

    International Webmasters Association

  • Subscribe to my blog via email

    Insert here your e-mail address and you will receive a message when a new post will come.

Distinguere l’uomo dalla macchina in modo accessibile

Un nome per ciascuno…ma solo per poco

La prima idea che mi è venuta in mente per cercare di creare un CAPTCHA non invasivo era l’utilizzo dell’ID di sessione per modificare all’occorrenza di ogni sessione i nomi degli elementi del modulo incriminato.

$codice = md5(session_id());

Quindi a seguire il codice del modulo sarà:

<form method="post" action="scrivi.php">
  <p>
    <label for="nome">Nome</label>
    <input type="text" value="" id="nome" name="nome<?=$codice?>" />
  </p>
  <p>
    <label for="nome">Cognome</label>
    <input type="text" value="" id="conome" name="cognome<?=$codice?>" />
  </p>
  <p>
    <input type="submit" name="conferma<?=$codice?>" value="conferma" />
  </p>
</form>

In pratica è stato aggiunto semplicemente il $codice come suffisso di ciascun nome di campo.

L’algoritmo che si preoccuperà di validare i contenuti del modulo sarà il seguente:

$sid = md5(session_id());

if(!isset($_POST[$campo_conferma . $sid])) $error = true;
if(!isset($_POST[$campo_cognome . $sid])) $error = true;
if(!isset($_POST[$campo_nome . $sid])) $error = true;

if($error){
  // Il codice di sessione non risulta valido
  header('location: modulo.php?error=y');
  exit();
}else{
  // Il ticket è stato identificato e quindi è possibile scrivere le informazioni
  $cognome = $_POST['cognome' . $sid];
  $nome = $_POST['nome' . $sid];
}

In pratica rigenero il codice partendo dall’ID di sessione e verifico che ciascuno dei campi del modulo, abbia il suffisso corretto. Quindi passo al salvataggio. In alternativa, se il codice di sessione codificato non fosse valido, il sistema farà un redirect verso il modulo da ricompilare riproponendo nuovamente l’insert e provvedendo ad assegnare un corretto valore codificato di sessione.

Il punto di forza di questo sistema è che il ticket è valido solo nell’ambito della sessione.

Il punto debole di questa soluzione, è il timeout al quale potrebbe andare incontro l’utente se perde troppo tempo nell’inserimento. Quindi è sconsigliata se gli elementi da inserire potrebbero causare una prolungata inattività dell’utente.

Il codice per la consultazione è invece rimasto invariato.