E-learn.ro
Panou utilizatori
Utilizator Parola
Creeaza cont nou    Recupereaza parola
Login
Newsletter
Introdu adresa ta de email
Inscrie-te
Inchide panoul de utilizatori
Add to Google

Tutoriale PHP

Descarca toolbar

Toolbar E-learn.ro Facebook Twitter

WEB DEVELOPMENT  /  PHP  /  Diverse (10)

Extensia Filter si validarea datelor externe

28.03.2009
Extensia Filter si validarea datelor externe

Securitatea in aplicatiile PHP este un subiect foarte vast. Acest tutorial explica una dintre cele mai importante parti din politica de securitate: filtrarea datelor provenite de la utilizatori.

Total vizualizari: 6658 6658 afisari   |   Comentarii  1   |   Rating   |   (1 vot)   |   Timp necesar: 30 min 30 min   |   Nivel de cunostiinte necesar: Avansat  Avansat

Sursa:  devzone.zend.com  
Autor:  devzone.zend.com
Adauga la tutoriale favorit Adauga la tutoriale favorite
Pagina:
« 1 2 3 »
comenteaza printeaza

Consideratii generale

Filter ofera doua tipuri de filtre:

1. filtre de "curatare" (sanitizing)

  • permit/resping anumite caractere dintr-un string
  • nu iau in considerare formatul datelor
  • returneaza intotdeauna un sir de caractere

2. filtre logice

  • analizeaza datele in amanunt
  • tin cont de tipul de date
  • returneaza valorile validate in caz de succes

Filtrele pot fi activate utilizand una dintre urmatoarele functii:

  • filter_input - accepta ca parametru o singura variabila de intrare
  • filter_input_array - poate filtra mai multe intrari la o singura apelare
  • filter_var - prelucreaza o singura variabila
  • filter_var_array - poate prelucra mai multe variabile la o singura apelare

Aceste functii vor returna variabila validata in caz de succes, FALSE daca a survenit o eroare (caractere nepermise, valori numerice in afara unui interval, etc.) sau NULL daca variabila nu a fost initializata. Comportamentul lor poate fi modificat daca este utilizat flag-ul FILTER_NULL_ON_FAILURE - functiilor vor returna NULL in caz de eroare si FALSE daca variabila nu a fost setata.

Un formular simplu ce utilizeaza un filtru logic

<html>
<head></head>
<body>
   <form action="example04.php" method="post" >
      Varsta: <input name="age" size="2">
      <input type="submit" name="submit" value="Go">
   </form>
</body>
</html>

si scriptul care preia datele:

<?php
if (!filter_has_var(INPUT_POST, 'submit')) {
    echo "form";
    // include formularul
}
 
$age = filter_input(INPUT_POST, 'age', FILTER_VALIDATE_INT);
if (is_null($age)) {
    echo "Campul varsta este obligatoriu.<br />";
} elseif ($age === FALSE) {
    echo "Va rugam introduceti o valoare valida.<br />";
} else {
    echo "Bine ati venit.<br/>";
}
?>

Functia filter_has_var verifica daca o variabila a fost sau nu initializata, fara a efectua si alte validari. Ea este echivalentul isset($_POST['submit']).
Functia filter_input primeste ca parametru o variabila si returneaza valoarea filtrata. In acest exemplu, ea verifica daca parametrul primit este o valoare intreaga.

In scriptul urmator au fost adaugate limite pentru varsta (intre 7 si 77), deoarece filtrele numerice accepta o valoare minima si una maxima.

<?php
if (!filter_has_var(INPUT_POST, 'submit')) {
    echo "form";
    // include formularul
}
$options = array('options'=> array('min_range'=>7, 'max_range'=>77));
$age = filter_input(INPUT_POST, 'age', FILTER_VALIDATE_INT, $options);
 
if (is_null($age)) {
    echo "Campul varsta este obligatoriu.<br />";
} elseif ($age === FALSE) {
    echo "Va rugam introduceti o valoare valida intre 7 si 77.<br />";
} else {
    echo "Bine ati venit.<br/>";
}
?>

Pentru a adauga un alt camp, spre exemplu o adresa de e-mail procedura este identica.

$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);

Exact ca si filtrul celalalt, $email va fi False daca adresa de email nu e valida sau Null daca acest camp lipseste.

Un formular simplu ce utilizeaza un filtru de "curatare"

<html>
<head></head>
<body><form action="example05.php" method="post" >
    Numele: <input name="name" size="50">
    <input type="submit" name="submit" value="Go">
    </form>
</body>
</html>

Urmatoarea apelare filter_input va curata variabila name si o va face utilizabila.

<?php
if (!filter_has_var(INPUT_POST, 'submit')) {
    echo "form";
    // include formularul
}
$name = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_SPECIAL_CHARS);
if (is_null($name)) {
    echo "Campul nume este obligatoriu.<br />";
} else {
    echo "Bine ai venit, $name.<br/>";
}
?>

De exemplu, daca name ar contine o valoare ca Johnny Weissmüller <b>Jr</b>, FILTER_SANITIZE_SPECIAL_CHARS va returna:

Bine ai venit, Johnny Weissm├╝ller <b>Jr</b>

Un filtru mai potrivit pentru acest camp ar fi:

$name = filter_input(INPUT_POST, 
                     'name',
                     FILTER_SANITIZE_STRING, 
                     FILTER_FLAG_ENCODE_HIGH|FILTER_FLAG_ENCODE_LOW);

ce ar returna:

Bine ai venit, Johnny Wei&#223;m&#252;ller Jr.

Filtrele de "curatare" accepta multe optiuni si flag-uri (semnalizatoare). In urmatorul exemplu, vom utiliza filtrul string (denumit si stripped). In manualul Filter vei putea gasi lista completa de filtre si flag-uri.

Pagina:
« 1 2 3 »
comenteaza printeaza
Alte tutoriale PHP:
Noteaza acest tutorial
Rating tutorial
 
(1 voturi)
Pentru a nota acest tutorial, trebuie sa fii logat!
COMENTARII (1) spune-ti parerea
bogdan bogdan , Joi, 17 Septembrie 2009, ora 16:52
#1

interesant...sunt curios daca nu este mai bine sa se folosesca expresii regulate pentru validarea datelor din formulare..ma refer din punct de vedere al puterii de calcul..ceva idei ?

Raporteaza acest comentariu ca injurios!
Posteaza un comentariu
Pentru a posta un comentariu, trebuie sa fii logat!
0 TOP UTILIZATORI* 0 0
Tutoriale scrise de claibornelara
claibornelara Rang utilizator claibornelara - Incepator
4800
Tutoriale scrise de mcuemica
mcuemica Rang utilizator mcuemica - Incepator
4735
Tutoriale scrise de ellarichards
ellarichards Rang utilizator ellarichards - Incepator
4605
Tutoriale scrise de emonclercheap
emonclercheap Rang utilizator emonclercheap - Incepator
4545
Tutoriale scrise de beacherrosa
beacherrosa Rang utilizator beacherrosa - Incepator
4405
* Acest top reprezinta punctajele acumulate in ultimele 30 de zile.
Verilog PHP Dreamweaver JSON SWF PSD RoR Vista Excel Photoshop Lightroom Fotografie MySQL Illustrator Swift 3D Word Bridge Sony Vegas Java Fireworks SEO Flash XHTML COREL DRAW HTML Gimp Javascript Outlook CSS XML StyleSheet Python Ruby on Rails AJAX Powerpoint Action Script
Promovare:
Daca faci parte din comunitatea E-learn.ro si doresti promovarea acesteia, poti accesa pagina de promovare.
Arhiva newsletter:
Daca ai ratat un numar mai vechi, sau vrei sa revezi care au fost noutatile E-learn.ro la un moment dat, poti accesa arhiva de newslettere.
  Copyright © 2008-2013 E-LEARN.ro. Toate drepturile rezervate. Termeni si conditii.
Conceput si realizat de Neokinetics Software