Gli ultimi tutorial di sviluppo web
 

PHP Convalida 5 Forma


Questo ei prossimi capitoli mostrano come utilizzare PHP per convalidare i dati del modulo.


PHP Form Validation

Pensate SICUREZZA durante l'elaborazione di forme di PHP!

Queste pagine mostrano come elaborare forme di PHP con la sicurezza in mente. convalida corretta dei dati del modulo è importante proteggere il modulo da hacker e spammer!

Il modulo HTML lavoreremo a in questi capitoli, contiene vari campi di input: obbligatori e campi facoltativi di testo, pulsanti di opzione e un pulsante di invio:

Le regole di convalida per il modulo di cui sopra sono i seguenti:

Campo regole di convalida
Nome Necessario. + Deve contenere solo lettere e spazi bianchi
E-mail Necessario. + Deve contenere un indirizzo email valido (with @ and .)
Sito web Opzionale. Se presente, deve contenere un URL valido
Commento Opzionale. Campo di input multi-linea (textarea)
Genere Necessario. Deve selezionare una

Prima di tutto guardare il codice HTML pianura per la forma:


campi di testo

Il nome, email e campi di siti web sono elementi di input di testo, e il campo di commento è una textarea. Il codice HTML simile a questo:

Name: <input type="text" name="name">
E-mail: <input type="text" name="email">
Website: <input type="text" name="website">
Comment: <textarea name="comment" rows="5" cols="40"></textarea>

Pulsanti di scelta

I campi di genere sono i pulsanti di opzione e il codice HTML seguente aspetto:

Gender:
<input type="radio" name="gender" value="female">Female
<input type="radio" name="gender" value="male">Male

L'elemento FORM

Il codice HTML del modulo è simile al seguente:

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

Quando il modulo viene inviato, i dati del modulo viene inviato con method = "post".

Qual è la variabile $ _SERVER [ "PHP_SELF"]?

Il $ _SERVER [ "PHP_SELF"] è una variabile super-globale che restituisce il nome del file dello script attualmente in esecuzione.

Così, il $ _SERVER [ "PHP_SELF"] invia i dati del modulo presentati alla pagina stessa, invece di saltare a una pagina diversa. In questo modo, l'utente riceverà i messaggi di errore sulla stessa pagina come la forma.

Qual è il htmlspecialchars() funzione?

Il htmlspecialchars() funzione converte i caratteri speciali in entità HTML. Ciò significa che andrà a sostituire i caratteri HTML come <e> con & lt; e & gt ;. Questo impedisce agli aggressori di sfruttare il codice iniettando codice HTML o JavaScript (Cross-site Scripting attacks) in forme.


Big Nota su PHP modulo di protezione

Il $ _SERVER [ "PHP_SELF"] variabile può essere utilizzata dagli hacker!

Se PHP_SELF viene utilizzato nella tua pagina, quindi l'utente può inserire una barra (/) e poi alcuni Cross Site Scripting (XSS) comandi da eseguire.

Cross-site scripting (XSS) è un tipo di vulnerabilità di sicurezza informatica in genere si trovano in applicazioni Web. XSS consente agli aggressori di iniettare script lato client nelle pagine Web visualizzate da altri utenti.

Supponiamo di avere il seguente modulo in una pagina denominata "test_form.php" :

<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">

Ora, se un utente entra nella normale URL nella barra degli indirizzi come "http://www.example.com/test_form.php" , il codice di cui sopra sarà tradotto a:

<form method="post" action="test_form.php">

Fin qui tutto bene.

Tuttavia, si consideri che un utente inserisce il seguente URL nella barra degli indirizzi:

http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E

In questo caso, il codice di cui sopra sarà tradotto a:

<form method="post" action="test_form.php/"><script>alert('hacked')</script>

Questo codice aggiunge un tag script e un comando di allarme. E quando la pagina viene caricata, verranno eseguiti il codice JavaScript (the user will see an alert box) . Questo è solo un esempio semplice e innocuo come la variabile PHP_SELF può essere sfruttata.

Essere a conoscenza di che qualsiasi codice JavaScript può essere aggiunto all'interno del <script> tag! Un hacker può reindirizzare l'utente a un file su un altro server, e che il file può contenere codice maligno che può alterare le variabili globali o inviare il modulo ad un altro indirizzo per salvare i dati utente, per esempio.


Come evitare $ _SERVER [ ""] PHP_SELF exploit?

$ _SERVER [ ""] PHP_SELF exploit può essere evitato utilizzando i htmlspecialchars() funzione.

Il codice del modulo dovrebbe essere simile a questo:

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

Il htmlspecialchars() funzione converte i caratteri speciali in entità HTML. Ora, se l'utente cerca di sfruttare la variabile PHP_SELF, il risultato sarà il seguente risultato:

<form method="post" action="test_form.php/&quot;&gt;&lt;script&gt;alert('hacked')&lt;/script&gt;">

L'exploit tentativo fallisce, e nessun danno è fatto!


Convalida modulo dati con PHP

La prima cosa che faremo è quello di passare attraverso tutte le variabili di PHP htmlspecialchars() la funzione.

Quando usiamo i htmlspecialchars() la funzione; quindi se un utente tenta di inviare il seguente in un campo di testo:

<Script> posizione. href('http://www.hacked.com') </ script>

- questo non sarebbe stato giustiziato, perché sarebbe salvato come HTML sfuggito codice, in questo modo:

& Lt; script & gt; posizione. href('http://www.hacked.com') & lt; / script & gt;

Il codice è ora al sicuro da visualizzare su una pagina o all'interno di una e-mail.

Ci sarà anche fare altre due cose quando l'utente invia il modulo:

  1. Personaggi Strip inutili (extra space, tab, newline) dai dati di input dell'utente (with the PHP trim() funzione)
  2. Rimuovere barre rovesciate (\) dai dati inseriti dall'utente (with the PHP stripslashes() funzione)

Il passo successivo è quello di creare una funzione che farà tutto il controllo per noi (which is much more convenient than writing the same code over and over again) .

Chiameremo la funzione test_input() .

Ora, siamo in grado di controllare ogni variabile $ _POST con la test_input() la funzione, e lo script si presenta in questo modo:

Esempio

<?php
// define variables and set to empty values
$name = $email = $gender = $comment = $website = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  $name = test_input($_POST["name"]);
  $email = test_input($_POST["email"]);
  $website = test_input($_POST["website"]);
  $comment = test_input($_POST["comment"]);
  $gender = test_input($_POST["gender"]);
}

function test_input($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}
?>
Esempio Run »

Si noti che all'inizio dello script, controlliamo se la forma è stata presentata utilizzando $ _SERVER [ "REQUEST_METHOD"]. Se il REQUEST_METHOD è POST, allora la forma è stata presentata - e dovrebbe essere convalidato. Se non è stata presentata, saltare la convalida e visualizzare un form vuoto.

Tuttavia, nell'esempio di cui sopra, tutti i campi di inserimento sono facoltativi. Lo script funziona bene anche se l'utente non immette alcun dato.

Il passo successivo è quello di rendere i campi di input richiesti e creare messaggi di errore, se necessario.