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.


Pubblicato

in

, ,

da

Tag:

%d blogger hanno fatto clic su Mi Piace per questo: