Validazione dei dati con PHP

Capita spesso che i programmatori php, un po per pigrizia, un po per mancanza di caffeina, si dimentichino di validare i dati a livello server, affidandosi unicamente alla validazione client-side con javascript…. no va bene!! ecco un esempio pratico:

Il seguente form mette a disposizione una select-list da cui scegliere la distribuzione linux che si preferisce tra quelle presenti nella lista:

<form name="censimento" method="POST" action="registra.php">
 <select name="distro">
          <option value="Debian">Debian</option>
          <option value="Slackware">Slackware</option>
          <option value="Ubuntu">Ubuntu</option>
          <option value="Arch Linux">Arch Linux</option>
      </select>  <input type="submit" value="Vota"> <
&ltform>

Lo script presente nella pagina registra.php non dovrà fa altro che modificare una tabella Mysql o un file xml che tiene conto delle votazioni.
Assumiamo di aver scritto una funzione ad hoc per il salvataggio delle nostre informazioni ,di averla chiamata salvaVoto() e che come argomento accetti la stringa con il nome della distro votata, il codice per il salvataggio del voto potrebbe essere il seguente:

<?php
function salvaVoto($_distro) {
 //QUI IL CODICE DI SALVATAGGIO
}
if (isset($_POST["distro"])) {
      salvaVoto($_POST["distro"]);
 } else {
      echo "<b>Errore!</b> Non è stata specificata alcuna distribuzione!!<br />";
  }
?>

I meno attenti di voi diranno: “Che problema c’è? Il widget select presente nel form obbliga ad una scelta imposta dal programmatore!”, ma non è così!!
Anche se il passaggio avviene tramite il metodo POST, che non permette di manipolare il contenuto delle variabili direttamente dalla barra dell’URL, chiunque potrebbe:

  • Esaminare il codice sorgente della pagina contenente il form “censimento”
  • Individuare l’indirizzo della pagina che elabora e salva i dati
  • Scrivere un form risiedente in una qualsiasi pagina html (deve essere accessibile da un browser, quindi anche nella vostra Home) che punti alla stessa pagina di elaborazione, utilizzando il metodo POST e che invii una variabile chiamata “distro”, come nel caso del form originale.

Ecco un esempio di form HTML creato per inviare richieste alla pagina registra.php (assumendo che i due listati precedenti siano collocati all’indirizzo http://www.sito.it):

<form name="censimento" method="POST" action="registra.php">
      <input type="text" name="distro">
       <input type="submit" value="Vota">
;  </form>

In questo modo, anche la più stupida delle marmotte potrebbe inviare dati arbitrari al vostro script di registrazione, mandando a puttane tutto il vostro (pessimo) lavoro. La tabella Mysql che state utilizzando per salvare le votazioni potrebbe contenere qualsiasi stringa, quale sarebbe la vostra reazione se la ritrovaste piena di WINDOWS VISTA al posto di una delle distro Linux che avete proposto?

Questo è solo uno degli scenari (anche moooolto più complessi) in cui i dati esterni devono essere filtrati.

Ecco un modo molto semplice per filtrare la nostra variabile:

<?php
function salvaVoto($_distro) {
  //QUI IL CODICE DI SALVATAGGIO
 }
if (isset($_POST["distro"])) {
      switch($_POST["distro"]) {
          case "Debian":
              salvaVoto($_POST["distro"]);
          break;
          case "Slackware":
              salvaVoto($_POST["distro"]);
          break;
          case "Ubuntu":
             salvaVoto($_POST["distro"]);
          break;
          case "Arch Linux":
              salvaVoto($_POST["distro"]);
          break;
          default:
              echo "<b>Attenzione:</b> Voto nullo!<br />";
 }
?>

Il loop switch, dispone di tutta la casistica legata alle possibili stringhe contenute nella variabile $_POST[“distro”], in questo modo non rischiamo di riempire di schifezze la nostra tabella😉

2 risposte a “Validazione dei dati con PHP

  1. L’ultimo switch lo puoi semplificare parecchio, evitando inoltre di duplicare del codice:

    switch($_POST["distro"]) {
    case "Debian":
    case "Slackware":
    case "Ubuntu":
    case "Arch Linux":
    salvaVoto($_POST["distro"]);
    break;
    default:
    echo "Attenzione: Voto nullo!";
    }

    Ottimi consigli per i programmatori disattenti!

  2. Si in effetti hai ragione😀😀

    Grazie mille per aver dimezzato le righe di codice, cosa che ritengo molto importante: un codice più corto spaventa molto meno quando bisogna revisionarlo!! (parola di programmatore XD)

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...