Ultimele tutoriale de dezvoltare web
 

PHP 5 Formular de validare


Aceasta și capitolele următoare arată cum să utilizați PHP pentru a valida datele din formular.


PHP Formular de validare

Gândiți -vă de securitate atunci când procesarea formularelor PHP!

Aceste pagini vor arăta cum să proceseze formulare PHP cu securitate în minte. validarea corectă a formularului de date este importantă pentru a proteja formularul de hackeri și spam!

Forma HTML vom lucra la aceste capitole, conține diverse domenii de intrare: necesare și câmpuri opționale de text, butoane radio, și un buton de trimitere:

Regulile de validare pentru formularul de mai sus sunt după cum urmează:

Camp Reguli de validare
Nume Necesar. + Trebuie să conțină doar litere și spații albe
E-mail Necesar. + Trebuie să conțină o adresă de e - mail validă (with @ and .)
website Opțional. În cazul în care este prezent, acesta trebuie să conțină o adresă URL validă
cometariu Opțional. Câmp de intrare multi-linie (textarea)
Gen Necesar. Trebuie să selectați unul

În primul rând ne vom uita la codul HTML simplu pentru forma:


Domenii text

Numele, e-mail, site-ul și câmpurile sunt elemente de introducere a textului, iar câmpul de comentariu este un textarea. Codul HTML arata ca acest lucru:

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>

Butoane radio

Câmpurile de gen sunt butoane radio și codul HTML arata ca acest lucru:

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

Elementul Forma

Codul HTML al formei arata ca aceasta:

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

Atunci când formularul este transmis, datele formular sunt trimise prin metoda = „post“.

Care este $ _SERVER [ "PHP_SELF"] variabila?

Dolari _SERVER [ „PHP_SELF“] este o variabilă super-global care returnează numele fișierului script de executare în prezent.

Astfel, $ _SERVER [ „PHP_SELF“] trimite datele din formularul trimis la pagina în sine, în loc de a sari într-o altă pagină. În acest fel, utilizatorul va primi mesaje de eroare pe aceeași pagină ca și formularul.

Ce este htmlspecialchars() funcția?

htmlspecialchars() funcția convertește caractere speciale pentru entitati HTML. Acest lucru înseamnă că va înlocui caractere HTML ca <i> cu & lt; și & gt ;. Acest lucru împiedică atacatorii să exploateze codul HTML sau prin injectarea de cod JavaScript (Cross-site Scripting attacks) - (Cross-site Scripting attacks) - (Cross-site Scripting attacks) în forme.


Notă mare pe PHP Formular de securitate

De $ _SERVER [ „PHP_SELF“] variabilă poate fi folosit de hackeri!

Dacă PHP_SELF este utilizat în pagina dvs. , un utilizator poate introduce o bară oblică (/) și apoi unele Cross Site Scripting (XSS) comenzi pentru a executa.

Cross-site scripting (XSS) este un tip de vulnerabilitate de securitate calculator de obicei găsite în aplicații Web. XSS permite atacatorilor să injecteze script - ul client-side în pagini web vizualizate de către alți utilizatori.

Să presupunem că avem formularul de mai jos într - o pagină denumită "test_form.php" :

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

Acum, dacă un utilizator introduce adresa URL normală în bara de adrese ca "http://www.example.com/test_form.php" , codul de mai sus va fi tradus în:

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

Până acum, bine.

Cu toate acestea, consideră că un utilizator introduce următoarea adresă URL în bara de adrese:

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

În acest caz, codul de mai sus va fi tradus în:

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

Acest cod adaugă o etichetă de script și o comandă de alertă. Și când se încarcă pagina, codul JavaScript va fi executat (the user will see an alert box) de (the user will see an alert box) . Acesta este doar un exemplu simplu și inofensiv modul în care variabila PHP_SELF poate fi exploatată.

Fiți conștienți de faptul că orice cod JavaScript poate fi adăugat în interiorul <script> tag - ul! Un hacker poate redirecționa utilizatorul într-un fișier de pe un alt server, și acel fișier poate stoca cod rău intenționat care poate modifica variabilele globale sau depune formularul la o altă adresă pentru a salva datele de utilizator, de exemplu.


Cum Pentru a evita $ _SERVER [ "PHP_SELF"] Exploits?

$ _SERVER [ "PHP_SELF"] exploateaza pot fi evitate prin utilizarea htmlspecialchars() funcții.

Codul formă ar trebui să arate astfel:

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

htmlspecialchars() funcția convertește caractere speciale pentru entitati HTML. Acum, dacă utilizatorul încearcă să exploateze variabila PHP_SELF, aceasta va duce la ieșire următoarele:

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

Exploit această încercare eșuează, și nu se face rău!


Validați Forma de date cu PHP

Primul lucru pe care îl vom face este de a trece prin toate variabilele PHP htmlspecialchars() funcția.

Când folosim htmlspecialchars() funcția; apoi, dacă un utilizator încearcă să prezinte următoarele într-un câmp de text:

<Script> de locație. href('http://www.hacked.com') </ script>

- acest lucru nu ar fi executat, deoarece ar fi salvat ca HTML code scăpat, ca aceasta:

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

Codul este acum în condiții de siguranță să fie afișat pe o pagină sau în interiorul unui e-mail.

Vom face, de asemenea, mai mult de două lucruri atunci când utilizatorul trimite formularul:

  1. Strip caractere care nu sunt necesare (extra space, tab, newline) din datele introduse de utilizator (with the PHP trim() funcția)
  2. Eliminați backslash (\) din datele de intrare de utilizator (with the PHP stripslashes() funcția)

Următorul pas este de a crea o funcție care va face toate verificarea pentru noi (which is much more convenient than writing the same code over and over again) de (which is much more convenient than writing the same code over and over again) .

Vom numi funcția test_input() .

Acum, putem verifica fiecare variabila $ _POST cu test_input() funcția, și script - ul arată astfel:

Exemplu

<?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;
}
?>
Run exemplu »

Observați că la începutul script-ul, vom verifica dacă formularul a fost depus, folosind $ _SERVER [ „REQUEST_METHOD“]. În cazul în care este REQUEST_METHOD POST, atunci Formularul a fost trimis - și ar trebui să fie validate. În cazul în care nu a fost depusă, sări peste validare și va afișa un formular gol.

Cu toate acestea, în exemplul de mai sus, toate câmpurile de intrare sunt opționale. Script-ul funcționează bine, chiar dacă utilizatorul nu introduce niciun fel de date.

Următorul pas este de a face câmpurile de intrare necesare și de a crea mesaje de eroare, dacă este necesar.