Disinfetta e convalida i dati con i filtri PHP

La convalida dei dati è parte integrante del lavoro con i moduli. Non solo i dati inviati non validi possono portare a problemi di sicurezza, ma possono anche danneggiare la tua pagina web. Oggi daremo un'occhiata a come rimuovere i caratteri non validi e convalidare i dati utilizzando la funzione "filter_var".


Un esempio può essere visto sotto. Un utente ha inserito il testo "Io non ne ho uno" come loro home page. Se questi dati dovevano essere inseriti in un database e successivamente recuperati come collegamento, il collegamento sarebbe interrotto.

La maggior parte delle persone tende a considerare la convalida dei dati come un processo immensamente noioso in cui uno:

  • Confronta i dati che vogliono convalidare contro ogni combinazione possibile a cui possano pensare.
  • Cerca di trovare un'espressione regolare dorata che corrisponda a tutte le combinazioni possibili.
  • Una combinazione dei due.

Ci sono ovvi problemi con quanto sopra elencato:

  • E 'assolutamente dispendioso in termini di tempo.
  • C'è un'alta probabilità di errore.

Fortunatamente, a partire dalla versione 5.2, PHP ha incluso una grande funzione chiamata filter_var questo porta via il dolore della convalida dei dati.

filter_var In Action

filter_var farà, entrambi, disinfettare e convalidare i dati. Qual è la differenza tra i due?

  • La disinfezione rimuoverà qualsiasi carattere illegale dai dati.
  • La convalida determinerà se i dati sono nella forma corretta.

Nota: perché sanificare e non solo convalidare? È possibile che l'utente abbia digitato accidentalmente un carattere sbagliato o che sia stato inserito in una brutta copia e incolla. Sanificando i dati, si assume la responsabilità di cercare l'errore dell'utente.

Come usare filter_var

utilizzando filter_var è incredibilmente facile. È semplicemente una funzione PHP che prende due pezzi di dati:

  • La variabile che vuoi controllare
  • Il tipo di controllo da utilizzare

Ad esempio, il codice seguente rimuoverà tutti i tag HTML da una stringa:

$ string = "

Ciao mondo!

"; $ new_string = filter_var ($ string, FILTER_SANITIZE_STRING); // $ new_string ora è" Hello, World! "

Ecco un altro esempio - questa volta più difficile. Il codice sottostante garantirà che il valore della variabile sia un indirizzo IP valido:

$ ip = "127.0.0.1"; $ valid_ip = filter_var ($ ip, FILTER_VALIDATE_IP); // $ valid_ip è TRUE $ ip = "127.0.1.1.1.1"; $ valid_ip = filter_var ($ ip, FILTER_VALIDATE_IP); // $ valid_ip è FALSE

È così semplice da usare filter_var. Per un elenco completo di tutte le regole che puoi controllare, consulta la fine di questo tutorial.

Esempio di sanitizzazione

Di seguito è riportato un breve esempio di input di sanificazione di due campi: un campo email e un campo home page. Questo esempio rimuoverà qualsiasi carattere che non dovrebbe verificarsi in entrambi i tipi di dati.


"; if (isset ($ _ POST ['homepage'])) echo filter_var ($ _ POST ['homepage'], FILTER_SANITIZE_URL); echo"

";?>
Indirizzo email:


Pagina iniziale:


Usando il FILTER_SANITIZE_EMAIL e FILTER_SANITIZE_URL costanti definite da PHP, il lavoro di indovinare di sapere quali personaggi sono illegali è sparito.

Esempio di validazione

Solo perché i dati sono sterilizzati non garantisce che sia formattato correttamente. Nell'esempio seguente, i dati non hanno bisogno di essere disinfettati, ma è ovvio che l'input dell'utente non è una email o un URL.

Per garantire che i dati siano formattati correttamente, devono essere convalidati.


"; else echo" $ email è NON un indirizzo email valido.

"; if (isset ($ _ POST ['homepage'])) $ homepage = filter_var ($ _ POST ['homepage'], FILTER_SANITIZE_URL); if (filter_var ($ homepage, FILTER_VALIDATE_URL)) echo" $ homepage è un URL valido.

"; else echo" $ homepage è NON un URL valido.

";?>
Indirizzo email:


Pagina iniziale:


Ora che i dati sono stati convalidati, puoi essere certo che le informazioni inviate sono esattamente ciò che stai cercando.

Mettere tutto insieme: un modulo di invio email

Ora che sono stati coperti i servizi di risanamento e la convalida dei dati, metteremo queste competenze in uso con un modulo di invio e-mail rapido. Questo non significa in alcun modo la qualità della produzione: per esempio, nessun modulo dovrebbe richiedere una home page, ma funzionerà perfettamente per questo tutorial. Il modulo richiederà 4 informazioni:

  • Nome
  • Indirizzo email
  • Home Page
  • Messaggio

Sanitizzeremo e verificheremo contro tutti e 4 i dati e invieremo l'e-mail solo se sono tutti validi. Se qualcosa non è valido o se i campi sono vuoti, il modulo verrà presentato all'utente insieme a un elenco di elementi da correggere. Restituiremo all'utente i dati sterilizzati nel caso in cui non siano consapevoli che determinati caratteri sono illegali.

Passaggio 1: creazione del modulo

Per il primo passaggio, crea semplicemente un elemento del modulo con 5 campi: il per sopra elencato e un pulsante di invio:

Nome:


Indirizzo email:


Pagina iniziale:


Messaggio:

Passaggio 2: determinare se il modulo è stato inviato

Puoi verificare se un modulo è stato inviato vedendo se il pulsante di invio è stato impostato. Inserisci il seguente codice sopra il modulo:

if (isset ($ _ POST ['Submit'])) 

Passaggio 3: convalida del nome e del campo del messaggio

Poiché sia ​​il nome che i campi del messaggio saranno disinfettati e convalidati allo stesso modo, li faremo insieme. Innanzitutto, controlla se entrambi i campi sono vuoti, procedendo come segue:

if ($ _POST ['name'] == "") if ($ _POST ['message'] == "")

Quindi, disinfettarli con il FILTER_SANITIZE_STRING costante

$ _POST ['name'] = filter_var ($ _ POST ['name'], FILTER_SANITIZE_STRING); $ _POST ['message'] = filter_var ($ _ POST ['message'], FILTER_SANITIZE_STRING);

Infine, verifica che i due campi non siano ancora vuoti. Questo per garantire che dopo aver rimosso tutti i caratteri non validi, non ti rimane un campo vuoto:

if ($ _POST ['name'] == "") if ($ _POST ['message'] == "")

Non faremo alcuna convalida su questi due campi semplicemente perché non esiste un modo assoluto di validare contro un Nome o un messaggio arbitrario.

Il codice finale assomiglia a questo:

if ($ _POST ['name']! = "") $ _POST ['name'] = filter_var ($ _ POST ['name'], FILTER_SANITIZE_STRING); if ($ _POST ['name'] == "") $ errors. = 'Per favore inserisci un nome valido.

'; else $ errors. = 'Per favore inserisci il tuo nome.
'; if ($ _POST ['message']! = "") $ _POST ['message'] = filter_var ($ _ POST ['message'], FILTER_SANITIZE_STRING); if ($ _POST ['message'] == "") $ errors. = 'Per favore inserisci un messaggio da inviare.
'; else $ errors. = 'Per favore inserisci un messaggio da inviare.
';

Passaggio 4: convalidare il campo di posta elettronica

Il campo di posta elettronica sarà disinfettato e convalidato proprio com'era prima nel tutorial.

Innanzitutto, verifica che non sia vuoto:

if ($ _POST ['email']! = "")

Quindi, disinfettalo:

$ email = filter_var ($ _ POST ['email'], FILTER_SANITIZE_EMAIL);

Infine, convalidalo come un vero indirizzo email:

if (! filter_var ($ email, FILTER_VALIDATE_EMAIL))

Il codice finale assomiglia a questo:

if ($ _POST ['email']! = "") $ email = filter_var ($ _ POST ['email'], FILTER_SANITIZE_EMAIL); if (! filter_var ($ email, FILTER_VALIDATE_EMAIL)) $ errors. = "$ email è NON un indirizzo email valido.

"; else $ errors. = 'Inserisci il tuo indirizzo email.
';

Passaggio 5: convalida il campo della pagina iniziale

Anche in questo caso, il campo della home page verrà disinfettato e convalidato nello stesso modo di prima nel tutorial.

Innanzitutto, assicurati che non sia vuoto:

if ($ _POST ['homepage']! = "")

Quindi, disinfettalo e rimuovi eventuali caratteri illegali:

$ homepage = filter_var ($ _ POST ['homepage'], FILTER_SANITIZE_URL)

Infine, convalidalo per assicurarti che sia un vero URL:

if (! filter_var ($ homepage, FILTER_VALIDATE_URL))

Il codice finale assomiglia a questo:

if ($ _POST ['homepage']! = "") $ homepage = filter_var ($ _ POST ['homepage'], FILTER_SANITIZE_URL); if (! filter_var ($ homepage, FILTER_VALIDATE_URL)) $ errors. = "$ homepage è NON un URL valido.

"; else $ errors. = 'Inserisci la tua home page.
';

Passaggio 6: controlla la presenza di errori e invia il messaggio

Ora che abbiamo esaminato tutti i campi, è tempo di segnalare gli errori o inviare il messaggio. Inizia assumendo che non ci siano errori:

se (! $ errori) 

Quindi crea il messaggio email:

$ mail_to = '[email protected]'; $ subject = 'New Mail from Form Submission'; $ message = 'From:'. $ _POST ['nome']. "\ N"; $ message. = 'Email:'. $ _POST ['email']. "\ N"; $ message. = 'Homepage:'. $ _POST ['homepage']. "\ N"; $ message. = "Messaggio: \ n". $ _POST ['messaggio']. "\ N \ n";

E infine, invia il messaggio:

posta ($ a, $ oggetto, $ messaggio);

Tuttavia, in caso di errori, segnalali e chiedi di riprovare:

eco '
'. $ errori. '
';

Il progetto completato si presenta così:


'; else $ errors. = 'Per favore inserisci il tuo nome.
'; if ($ _POST ['email']! = "") $ email = filter_var ($ _ POST ['email'], FILTER_SANITIZE_EMAIL); if (! filter_var ($ email, FILTER_VALIDATE_EMAIL)) $ errors. = "$ email è NON un indirizzo email valido.

"; else $ errors. = 'Inserisci il tuo indirizzo email.
'; if ($ _POST ['homepage']! = "") $ homepage = filter_var ($ _ POST ['homepage'], FILTER_SANITIZE_URL); if (! filter_var ($ homepage, FILTER_VALIDATE_URL)) $ errors. = "$ homepage è NON un URL valido.

"; else $ errors. = 'Inserisci la tua home page.
'; if ($ _POST ['message']! = "") $ _POST ['message'] = filter_var ($ _ POST ['message'], FILTER_SANITIZE_STRING); if ($ _POST ['message'] == "") $ errors. = 'Per favore inserisci un messaggio da inviare.
'; else $ errors. = 'Per favore inserisci un messaggio da inviare.
'; if (! $ errors) $ mail_to = '[email protected]'; $ subject = 'New Mail from Form Submission'; $ message = 'From:'. $ _POST ['nome']. "\ N"; $ message. = 'Email:'. $ _POST ['email']. "\ N"; $ message. = 'Homepage:'. $ _POST ['homepage']. "\ N"; $ message. = "Messaggio: \ n". $ _POST ['messaggio']. "\ N \ n"; posta ($ a, $ oggetto, $ messaggio); echo "Grazie per la tua email!

"; else echo '
'. $ errori. '
'; ?>
Nome:


Indirizzo email:


Pagina iniziale:


Messaggio:

Sommario

Spero che leggere questo tutorial ti abbia fornito una buona introduzione alle nuove funzionalità di filtro dei dati di PHP. Ci sono ancora molte più funzioni e regole che non sono state coperte, quindi se sei interessato a saperne di più, consulta la sezione Filtro dei dati nel manuale PHP.

  • Iscriviti al feed RSS di NETTUTS per ulteriori tuts e articoli di sviluppo web giornalieri.