Sanitizează și validarea datelor cu ajutorul filtrelor PHP

Validarea datelor este o parte integrantă a lucrului cu formularele. Nu numai că datele trimise nevalid pot conduce la probleme de securitate, dar pot și să vă spargă pagina web. Astăzi, vom examina modul de eliminare a caracterelor ilegale și validarea datelor utilizând funcția "filter_var".


Un exemplu poate fi văzut mai jos. Un utilizator a introdus textul "Nu am unul" ca pagină de pornire. Dacă aceste date urmau să fie introduse într-o bază de date și apoi recuperate mai târziu ca o legătură, legătura ar fi întreruptă.

Majoritatea oamenilor tind să se gândească la validarea datelor ca la un proces extrem de obositor în care unul:

  • Compară datele pe care doresc să le valideze împotriva tuturor combinațiilor posibile pe care le pot gândi.
  • Încearcă să găsești o Expresie Regulară aurie care se va potrivi cu fiecare combinație posibilă.
  • O combinație a celor două.

Există probleme evidente cu cele enumerate mai sus:

  • Este absolut de consumatoare de timp.
  • Există o șansă foarte mare de eroare.

Din fericire, începând cu versiunea 5.2, PHP a inclus o mare funcție numită filter_var care elimină durerea validării datelor.

filter_var În acțiune

filter_var va face, ambele, dezinfectarea și validarea datelor. Care este diferența dintre cele două?

  • Sanitizarea va elimina orice caracter ilegal din date.
  • Validarea va determina dacă datele sunt în forma corectă.

Notă: de ce sanitizați și nu doar validați? Este posibil ca utilizatorul să fi scris greșit într-un caracter greșit sau poate că a fost dintr-o copie și o copie proastă. Prin dezinfectarea datelor, vă asumați responsabilitatea de a vâna greseala în afara utilizatorului.

Cum să utilizați filter_var

Utilizarea filter_var este incredibil de ușor. Este pur și simplu o funcție PHP care necesită două date:

  • Variabila pe care doriți să o verificați
  • Tipul de verificare de utilizat

De exemplu, codul de mai jos va elimina toate etichetele HTML dintr-un șir:

$ string = "

Salut Lume!

"$ new_string = filter_var ($ string, FILTER_SANITIZE_STRING); // $ new_string este acum" Bună ziua, lume! ";

Iată un alt exemplu - de data asta mai dificil. Codul de mai jos va asigura că valoarea variabilei este o adresă IP validă:

$ ip = "127.0.0.1"; $ valid_ip = filtru_var ($ ip, FILTER_VALIDATE_IP); // $ valid_ip este TRUE $ ip = "127.0.1.1.1.1"; $ valid_ip = filtru_var ($ ip, FILTER_VALIDATE_IP); // $ valid_ip este FALSE

Atât de simplu este de a utiliza filter_var. Pentru o listă completă a tuturor regulilor pe care le puteți verifica, consultați sfârșitul acestui tutorial.

Exemplu de dezintoxicare

Mai jos este un exemplu rapid de dezinfecție a datelor din două câmpuri: un câmp de e-mail și un câmp de pagină de pornire. Acest exemplu va elimina orice caractere care nu ar trebui să apară în niciun tip de date.


"; dacă isset ($ _ POST ['homepage'])) echo filter_var ($ _ POST ['homepage'],

";>>
Adresa de email:


Pagina principala:


Prin utilizarea funcției FILTER_SANITIZE_EMAIL și FILTER_SANITIZE_URL constantele definite de PHP, ghicitul lucru de a ști ce personaje sunt ilegale este plecat.

Exemplul de validare

Doar pentru că datele sunt dezinfectate nu asigură că sunt corect formatate. În exemplul de mai jos, datele nu au fost dezinfectate, dar este evident că datele introduse de utilizator nu sunt un e-mail sau o adresă URL.

Pentru a asigura că datele sunt formatate corespunzător, acestea trebuie validate.


"; altceva echo" $ email este NU o adresă de e-mail validă.

"; dacă este ($ _ POST ['homepage'])) $ homepage = filter_var ($ _ POST ['homepage'], FILTER_SANITIZE_URL) o adresă URL validă.

"; else echo" $ homepage este NU o adresă URL validă.

";?>
Adresa de email:


Pagina principala:


Acum că datele au fost validate, puteți fi siguri că informațiile trimise sunt exact ceea ce căutați.

Punerea totul împreună: un formular de trimitere prin e-mail

Acum, că salvarea și validarea datelor au fost acoperite, le vom pune aceste abilități într-un formular rapid de trimitere prin e-mail. Acest lucru nu va fi în nici un caz de calitate a producției - de exemplu, nici o formă nu ar trebui să necesite o pagină de pornire - dar va funcționa perfect pentru acest tutorial. Formularul va avea 4 informații:

  • Nume
  • Adresa de email
  • Pagina principala
  • Mesaj

Vom dezinfecta și valida toate cele 4 fragmente de date și vom trimite doar e-mailul dacă acestea sunt toate valide. Dacă ceva nu este valid sau dacă câmpurile sunt necompletate, formularul va fi prezentat utilizatorului împreună cu o listă de elemente pe care să le remediați. De asemenea, vom returna datele dezinfectate utilizatorului în cazul în care nu sunt conștiente de faptul că anumite caractere sunt ilegale.

Pasul 1 - Crearea formularului

Pentru primul pas, trebuie doar să creați un element de formă cu 5 câmpuri: butoanele listate mai sus și un buton de trimitere:

Nume:


Adresa de email:


Pagina principala:


Mesaj:

Pasul 2 - Determinați dacă a fost trimis formularul

Puteți verifica dacă a fost trimis un formular, dacă vedeți dacă butonul de trimitere a fost "setat". Plasați următorul cod deasupra formularului:

dacă (isset ($ _ POST ['Trimite'])) 

Pasul 3 - Validarea câmpului Nume și Mesaj

Deoarece ambele câmpuri de nume și mesaje vor fi dezinfectate și validate la fel, le vom face împreună. Mai întâi, verificați dacă un câmp este gol făcând următoarele:

dacă ($ _POST ['name'] == "") dacă ($ _POST ['message'] == "")

Apoi, dezinfectați-i cu FILTER_SANITIZE_STRING constant

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

În cele din urmă, verificați dacă cele două câmpuri nu sunt goale. Acest lucru trebuie să vă asigurați că, după eliminarea tuturor caracterelor ilegale, nu rămâneți cu un câmp gol:

dacă ($ _POST ['name'] == "") dacă ($ _POST ['message'] == "")

Nu vom face nici o validare în aceste două câmpuri pur și simplu pentru că nu există nici o modalitate absolută de validare împotriva unui nume sau a unui mesaj arbitrar.

Codul final arată astfel:

dacă $ _POST ['name']! = "") $ _POST ['nume'] = filtrul_var ($ _ POST ['name']; dacă $ _POST ['name'] == "") $ errors = = Vă rugăm să introduceți un nume valid.

„; altceva $ errors = = Introduceți numele dvs..
„; dacă ($ _POST ['message']! = "") $ _POST ['mesaj'] = filter_var ($ _ POST ['mesaj'], FILTER_SANITIZE_STRING); dacă ($ _POST ['message'] == "") $ errors. = 'Introduceți un mesaj de trimis.
„; altceva $ errors. = 'Introduceți un mesaj de trimis.
„;

Pasul 4 - Validați câmpul E-mail

Câmpul de e-mail va fi dezinfectat și validat la fel cum a fost mai devreme în tutorial.

În primul rând, verificați dacă nu este necompletat:

dacă ($ _POST ['email']! = "")

Apoi, dezinfectați-l:

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

În final, validați-l ca pe o adresă de e-mail adevărată:

dacă (! filter_var ($ email, FILTER_VALIDATE_EMAIL))

Codul final arată astfel:

dacă $ _POST ['email']! = "") $ email = filtru_var ($ _ POST ['email'], FILTER_SANITIZE_EMAIL); dacă (! filter_var ($ email, FILTER_VALIDATE_EMAIL)) $ errors. = "$ e-mail este NU o adresă de e-mail validă.

"; altceva $ errors = = Introduceți adresa dvs. de e-mail.
„;

Pasul 5 - Validați câmpul Pagină de pornire

Din nou, câmpul de pe pagina de pornire va fi dezinfectat și validat în același mod ca și mai devreme în tutorial.

Mai întâi, asigurați-vă că nu este gol:

dacă ($ _POST ['homepage']! = "")

Apoi, dezinfectați-l și eliminați orice personaj ilegal:

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

În cele din urmă, validați-o pentru a vă asigura că este o adresă URL adevărată:

dacă (! filter_var ($ homepage, FILTER_VALIDATE_URL))

Codul final arată astfel:

dacă $ _POST ['homepage']! = "") $ homepage = filter_var ($ _ POST ['homepage'], FILTER_SANITIZE_URL); dacă ! filter_var ($ homepage, FILTER_VALIDATE_URL)) $ errors. = "Pagina principală este NU o adresă URL validă.

"; altceva $ errors = = Vă rugăm să introduceți pagina dvs. de pornire.
„;

Pasul 6 - Verificați erorile și trimiteți mesajul

Acum, că am trecut prin toate câmpurile, este timpul să raportați erorile sau să trimiteți mesajul. Începeți, presupunând că nu au existat erori:

dacă (! $ errors) 

Apoi, construiți mesajul de e-mail:

$ mail_to = '[email protected]'; $ subject = 'Mesaj nou de la trimiterea formularului'; $ message = 'De la:'. $ _POST ['name']. "\ N"; $ message = 'Email:'. $ _POST ['email']. "\ N"; $ message = 'Pagina de pornire:'. $ _POST ['homepage']. "\ N"; "Mesaj: \ n". $ _POST ['mesaj']. "\ N \ n";

Și, în cele din urmă, trimiteți mesajul:

mail ($ la, $ subiect, $ mesaj);

Cu toate acestea, dacă au existat erori, raportați-le și încercați din nou să încercați:

echo "
". $ erori. '
„;

Proiectul finalizat arată astfel:


„; altceva $ errors = = Introduceți numele dvs..
„; dacă ($ _POST ['email']! = "") $ email = filtru_var ($ _ POST ['email'], FILTER_SANITIZE_EMAIL); dacă (! filter_var ($ email, FILTER_VALIDATE_EMAIL)) $ errors. = "$ e-mail este NU o adresă de e-mail validă.

"; altceva $ errors = = Introduceți adresa dvs. de e-mail.
„; dacă ($ _POST ['homepage']! = "") $ homepage = filter_var ($ _ POST ['homepage'], FILTER_SANITIZE_URL); dacă ! filter_var ($ homepage, FILTER_VALIDATE_URL)) $ errors. = "Pagina principală este NU o adresă URL validă.

"; altceva $ errors = = Vă rugăm să introduceți pagina dvs. de pornire.
„; dacă ($ _POST ['message']! = "") $ _POST ['mesaj'] = filter_var ($ _ POST ['mesaj'], FILTER_SANITIZE_STRING); dacă ($ _POST ['message'] == "") $ errors. = 'Introduceți un mesaj de trimis.
„; altceva $ errors. = 'Introduceți un mesaj de trimis.
„; dacă (! $ erori) $ mail_to = '[email protected]'; $ subject = 'Mesaj nou de la trimiterea formularului'; $ message = 'De la:'. $ _POST ['name']. "\ N"; $ message = 'Email:'. $ _POST ['email']. "\ N"; $ message = 'Pagina de pornire:'. $ _POST ['homepage']. "\ N"; "Mesaj: \ n". $ _POST ['mesaj']. "\ N \ n"; mail ($ la, $ subiect, $ mesaj); echo "Vă mulțumim pentru e-mailul dvs.!

"; altceva echo '
". $ erori. '
„; ?>
Nume:


Adresa de email:


Pagina principala:


Mesaj:

rezumat

Sper că citirea acestui tutorial vă oferă o bună prezentare a noilor caracteristici de filtrare a datelor din PHP. Există încă multe funcții și reguli care nu au fost acoperite, deci dacă sunteți interesat să aflați mai multe, vă rugăm să consultați secțiunea Filtrarea datelor din manualul PHP.

  • Abonați-vă la fluxul RSS NETTUTS pentru mai multe tutori și articole zilnice de dezvoltare web.


Cod