2010-01-21 6 views
0

Je le constructeur suivant:Désinfecter Obtenir des données par le constructeur PHP

public function __construct(){ 
    foreach($_GET as $key=>$value){ 
     $_GET[$key] = addslashes($value); 
    } 
    $this->get = $_GET; 
} 

et il est utilisé comme ceci:

$app->get['id'] 

Où « id » est le paramètre étant passé à travers l'URL.
Existe-t-il un bon moyen de désinfecter toutes les données via le constructeur?

+2

Différentes langues/contextes avoir différents caractères spéciaux et nécessitent donc des traitements différents. Je ne pense pas que ce soit une bonne idée d'envoyer toutes les données par la même fonction. – Gumbo

+0

probablement pas une bonne idée, mais si vous l'avez fait, je passerais le $ _GET explicitement en tant que paramètre. Mieux vaut ne pas utiliser les données globales dans votre classe. – jonstjohn

+1

Je suis d'accord avec @Gumbo - il n'y a pas d'approche unique pour l'assainissement des données. –

Répondre

1

Un peu plus court chemin à faire:

public function __construct(){ 
    $this->get = array_map('mysql_real_escape_string', $_GET); 
} 
+0

C'est plutôt joli! – kylex

0

Pourquoi faites-vous cela? Pour empêcher l'injection SQL?

Prévenir l'injection devrait être fait au niveau de la construction de la requête, et devrait certainement être fait avec une fonction plus pertinente comme mysql_real_escape_string, qui va attraper tous les cas impairs, pas seulement les guillemets. Ce que vous faites ici n'est pas meilleur que la fameuse fonctionnalité des guillemets magiques qui a depuis été retirée de PHP.

0

Si vous connaissez le type de variable que vous êtes vous attend pouvez jeter le type souhaité, tel que

$this->id = (int)$app->get['id']; //forces type to be integer 
Questions connexes