PHP Form Validation
Questo capitolo spiega come utilizzare i nostri dati del modulo PHP presentati dalla convalida del client.
PHP Form Validation
Nel trattare con modulo PHP dobbiamo considerare la sicurezza. In questo capitolo vi mostreremo PHP Form Processing sicurezza dei dati, al fine di impedire agli hacker e spam abbiamo bisogno di garantire la convalida dati del modulo. |
modulo HTML descritta in questa sezione contiene i seguenti campi di immissione: deve essere utilizzato con i campi di testo opzionali, pulsanti di opzione, e pulsanti di conferma:
Sopra forma regole di convalida sono le seguenti:
campo | regole di convalida |
---|---|
nome | Must. + Contenere solo lettere e spazi |
Must. + Deve essere un indirizzo email valido (tra cui '@' e '.') | |
luogo | Must. Se presente, esso deve contenere un URL valido |
osservazione | Must. campo di input multi-line (campo di testo) |
genere | Must. È necessario selezionare un |
In primo luogo, guardiamo il codice del modulo HTML semplice:
campo di testo
campo "URL" "Nome", "E-mail", ed è un elemento di input di testo, il campo "note" è una textarea. codice HTML come segue:
“名字”: <input type="text" name="name"> E-mail: <input type="text" name="email"> 网址: <input type="text" name="website"> 备注: <textarea name="comment" rows="5" cols="40"></textarea>
pulsante Radio
campo "di genere" è un pulsante di scelta, il codice HTML simile a questo:
性别: <input type="radio" name="gender" value="female">女 <input type="radio" name="gender" value="male">男
elementi del modulo
codice del modulo HTML come segue:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Utilizzare questometodo = metodo "post"modulo per inviare i dati.
Ciò che è $ _SERVER [ ""] PHP_SELF variabili? $ _SERVER [ "PHP_SELF"] è una variabile super-globale, restituisce il nome del file script in esecuzione associati con la radice del documento. |
Quindi, $ _SERVER [ "PHP_SELF"] invierà i dati del modulo alla pagina corrente, invece di saltare ad una pagina diversa.
Qual è il metodo htmlspecialchars ()? htmlspecialchars () per alcuni caratteri predefiniti in entità HTML. I caratteri predefiniti sono:
|
modulo PHP necessaria per provocare l'attenzione a dove?
$ _SERVER [ ""] PHP_SELF variabili potrebbe essere utilizzato dagli hacker!
Quando gli hacker utilizzano cross-site scripting collegamento HTTP per attaccare, $ _ SERVER variabile [ "PHP_SELF"] sarà impiantato nello script del server. La ragione è che il file di script eseguibile cross-site è attaccato al sentiero dietro, in modo da $ _SERVER [ "PHP_SELF"] stringa conterrà link HTTP dietro il codice JavaScript.
XSS anche conosciuto come CSS (Script Cross-Site), attacchi cross-site scripting. Un malintenzionato di inserire la pagina Web dannoso in codice HTML, quando un utente naviga nella pagina, Web incorporato all'interno del codice html verrà eseguito per raggiungere scopo specifico dell'utente malintenzionato. |
Specificare il file seguente form denominato "test_form.php":
<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
Ora, usiamo l'URL per inviare l'indirizzo "test_form.php" specificata, come mostrato nel codice qui sopra è modificato come segue:
<form method="post" action="test_form.php">
Facendo così buono.
Tuttavia, tenendo conto che l'utente digitare il seguente indirizzo nella barra degli indirizzi del browser:
http://www.w3big.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E
Quanto sopra URL, viene interpretato come il seguente codice ed eseguirlo:
<form method="post" action="test_form.php/"><script>alert('hacked')</script>
Aggiungere un codice tag script e aggiungere il comando di allarme. Quando la pagina viene caricata eseguirà il codice Javascript (l'utente vedrà una finestra pop-up). Questo è solo un semplice esempio per illustrare variabile PHP_SELF verrà utilizzato dagli hacker.
Si prega di notare che qualsiasi codice JavaScript può essere aggiunto al tag <script>! Gli hacker possono utilizzare questa pagina per reindirizzare a un server in un'altra pagina, il file di codice della pagina per proteggere codice dannoso, il codice può essere modificato per ottenere l'utente di variabili globali o dati del modulo.
Come evitare il $ _SERVER [ "PHP_SELF"] essere sfruttati?
$ _SERVER [ "PHP_SELF"] da htmlspecialchars () per evitare di essere sfruttati.
formare codice come segue:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
htmlspecialchars () per alcuni caratteri predefiniti in entità HTML. Ora, se l'utente vuole utilizzare variabili PHP_SELF, i risultati vengono emessi come segue:
<form method="post" action="test_form.php/"><script>alert('hacked')</script>">
Il tentativo di vulnerabilità non è riuscito!
Utilizzare PHP convalida i dati del modulo
Prima di tutto abbiamo presentato i dati alla funzione utente () viene elaborata attraverso htmlspecialchars di PHP.
Quando usiamo i htmlspecialchars () la funzione, l'utente tenta di presentare i seguenti campi di testo:
<script>location.href('http://www.w3big.com')</script>
Non verrà eseguito il codice, perché sarà salvato come codice di escape HTML come segue:
<script>location.href('http://www.w3big.com')</script>
Il codice di cui sopra è sicuro e può essere visualizzato o inserire il messaggio nella pagina.
Quando l'utente invia il modulo, faremo le seguenti due cose:
- Utilizzare PHP assetto function () per rimuovere i dati inseriti dall'utente caratteri inutili (come ad esempio: spazio, tabulazione, nuova riga).
- Utilizzare stripslashes PHP () per rimuovere la barra rovesciata dati di input dell'utente (\)
Lasciate che queste funzioni di filtraggio scritte in funzione della nostra definizione, questo può migliorare notevolmente la riusabilità del codice.
La funzione denominata test_input ().
Ora, siamo in grado di test_input function () per rilevare tutte le variabili in $ _POST, codice di script è il seguente:
Esempi
// 定义变量并默认设置为空值
$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 »Esecuzione
Si noti che quando eseguiamo lo script precedente, da $ _SERVER [ "REQUEST_METHOD"] per rilevare se il modulo viene inviato. Se REQUEST_METHOD è POST, il modulo sarà presentato - i dati saranno verificati. Se il modulo non viene inviato salterà la verifica e visualizza uno spazio vuoto.
Utilizzare gli elementi di ingresso negli esempi di cui sopra sono opzionali, anche se l'utente non entra alcun dato può essere visualizzato correttamente.
Nel prossimo paragrafo descriveremo come convalidare i dati inseriti dall'utente.