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: 6652 6652 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:
« 12 3
comenteaza printeaza

Cum sa prelucrezi toate variabilele printr-o singura apelare?

Iata un exemplu de formular cu mai multe campuri:

 
<html>
<head></head>
<body><form action="example07.php" method="post" >
    Nume: <input name="name" size="50"><br />
    Email: <input name="email" size="50"><br />
    Site: <input name="homepage" size="50"><br />
    Varsta: <input name="age" size="4"><br />
    Venit: <input name="income" size="50"><br />
    Limbaje de programare preferate:
    <select name="favourites[]" size="6" multiple>
        <option value="haskell">haskell</option>
        <option value="r">R</option>
        <option value="lua">Lua</option>
        <option value="pike">Pike</option>
        <option value="rebol">Rebol</option>
        <option value="php">PHP</option>
    </select><br />
    <input type="submit" name="submit" value="Go">
    </form>
</body>
</html>

si scriptul care il proceseaza:

<?php
if (!filter_has_var(INPUT_POST, 'submit')) {
    echo "form";
    // include formularul
}
 
$defs = array(
    'name'       => array('filter'=>FILTER_SANITIZE_STRING,
                    'flags' => FILTER_FLAG_ENCODE_HIGH|FILTER_FLAG_ENCODE_LOW),
    'email'      => FILTER_VALIDATE_EMAIL,
    'homepage'   => FILTER_VALIDATE_URL,
    'age'        => array(  'filter' => FILTER_VALIDATE_INT,
                            'options'=> array('min_range'=>7, 'min_range'=>77)),
    'income'     => FILTER_VALIDATE_FLOAT,
    'favourites' => array(
                        'filter' => FILTER_SANITIZE_STRING,
                        'flags'  => FILTER_REQUIRE_ARRAY
                    ),
          );
 
$input = filter_input_array(INPUT_POST, $defs);
 
if ($input['age'] === FALSE) {
    exit("Trebuie sa ai varsta cuprinsa intre 7 si 77 de ani.");
}
 
if (is_null($input['favourites'])) {
    exit("Trebuie sa alegi doua sau mai multe limbaje.");
}
 
if (!in_array('PHP', $input['favourites'])) {
    exit("Nu-ti place PHP!");
}
 
/*Verifica alte campuri obligatorii*/
?>

Dupa cum poti observa, prelucrarea mai multor intrari se face similar ca in exemplu anterior. Singura diferenta este reprezentata de array-ul cu flag-uri care indica tipul de date pentru fiecare camp.

Procesarea complexa folosind callback

In loc sa faci o simpla validare cu siruri de caractere pentru favourites, se va folosi o functie utilizator. Argumentul options este utilizat pentru a defini reapelarea, avand aceeasi sintaxa ca functia call_user_func.

<?php
class language {
    function __construct($name) {
        $this->name = $name;
    }
}
 
function check_languages($var) {
    static $called = 0;
    $called++;
    echo "called: $called: $var<br />";
    $var = filter_var($var, FILTER_SANITIZE_STRIPPED);
    $l = new language($var);
    return $l;
}
 
if (!filter_has_var(INPUT_POST, 'submit')) {
    echo "forma";
    // include formularul
}
 
$defs = array(
    'name'       => array('filter'=>FILTER_SANITIZE_STRING,
                    'flags' => FILTER_FLAG_ENCODE_HIGH|FILTER_FLAG_ENCODE_LOW),
    'email'      => FILTER_VALIDATE_EMAIL,
    'homepage'   => FILTER_VALIDATE_URL,
    'age'        => FILTER_VALIDATE_INT,
    'income'     => FILTER_VALIDATE_FLOAT,
    'favourites' => array(
                            'filter' => FILTER_CALLBACK,
                            'options'  => 'check_languages'
                    ),
          );
 
$input = filter_input_array(INPUT_POST, $defs);
 
if ($input['age'] === FALSE) {
    exit("Trebuie sa ai varsta cuprinsa intre 7 si 77 de ani.");
}
 
if (is_null($input['favourites'])) {
    exit("Trebuie sa alegi doua sau mai multe limbaje.");
}
 
echo "Limbajul tau favorit:<br /><ul>";
foreach ($input['favourites'] as $l) echo '<li>' . $l->name . "</li>";
echo '</ul>';
?>

Functia va fi apelata o singura data daca variabila este scalara; daca variabila este de tip array, ea va fi apelata pentru fiecare element.

Filter nu valideaza datele primite inainte de callback, dar filter_var poate fi folosit in interiorul functiei de reapelare, asa cum apare in exemplu.

De ce nu obiecte?

Filter nu furnizeaza o interfata orientata pe obiecte. Actualul API este suficient de flexibil incat sa adauge orice tip de filtre si are suport unicode.

Linkuri utile

Manual: http://www.php.net/filter
Download: http://pecl.php.net/get/filter
Homepage: http://pecl.php.net/filter

Pagina:
« 12 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
4790
Tutoriale scrise de mcuemica
mcuemica Rang utilizator mcuemica - Incepator
4720
Tutoriale scrise de ellarichards
ellarichards Rang utilizator ellarichards - Incepator
4600
Tutoriale scrise de emonclercheap
emonclercheap Rang utilizator emonclercheap - Incepator
4530
Tutoriale scrise de beacherrosa
beacherrosa Rang utilizator beacherrosa - Incepator
4395
* Acest top reprezinta punctajele acumulate in ultimele 30 de zile.
XHTML HTML CSS Illustrator Lightroom StyleSheet Ruby on Rails Verilog Excel Fireworks Word Vista Flash Photoshop Swift 3D Dreamweaver SWF Action Script Bridge PHP MySQL XML PSD Fotografie Java JSON Outlook COREL DRAW Gimp RoR SEO AJAX Python Powerpoint Sony Vegas Javascript
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