2011-08-03 5 views
0

Je dois utiliser une fonction get pour récupérer la variable $ title d'une URL.

$title=$_GET["title"]; 

Le $ title est ensuite utilisé dans une requête MySQL.

La question est de savoir comment sécuriser cela? En d'autres termes, comment neutraliser les codes malveillants envoyés via l'URL.

+2

duplicata possible de http://stackoverflow.com/search?q=sanitize+php – Gordon

+1

Jetez un coup d'oeil à cette question: http://stackoverflow.com/questions/4749588/protect-against-sql-injection – enricog

Répondre

5

(Pour une valeur de "secure" égale à "pour empêcher la rupture de la base de données"): utilisez une API de base de données qui utilise bound parameters. Les parmètres liés ont tendance à laisser la base de données gérer l'échappement (utilise donc les routines échappées écrites par les auteurs de la base de données plutôt que les auteurs de la langue) et utilisent une syntaxe moins sujette à être oubliée pour cet échappement vital. chaque morceau de données d'entrée avec (par exemple) mysql_real_escape_string.

Vous pourriez avoir besoin de prendre d'autres mesures plus tard avant de faire quelque chose avec les données dans un contexte différent (par exemple pour le rendre sûr à insérer dans un document HTML)

0

Vous pouvez utiliser la fonction mysql_real_escape_string (évasions des caractères spéciaux une chaîne pour une utilisation dans un pour échapper à tous les personnages qui pourraient interférer avec base de données instruction SQL)

Php Manuel

1

vous devez utiliser mysql_real_escape_string(). Si vous affichez ce titre, vous devez également utiliser htmlentities() ou striptags()

0

Utilisez les paramètres de requête. Il y a un certain nombre de façons différentes de se connecter à mysql depuis PHP, et leur façon d'utiliser les paramètres varie un peu d'un framework à l'autre. Voici un exemple d'utilisation AOP:

$dbh = new PDO('mysql:dbname=test;host=127.0.0.1', 'username', 'password'); 
$sth = $dbh->prepare("select * from table where title = :title") 
$sth->execute(array(':title' => $_GET["title"])); 
$rows = $sth->fetchAll(); 

var_dump($rows); 
1

PHP 5.2, vous pouvez utiliser filter_input() et filter_input_array() pour aseptiser et valider les _GET le ou $ _POST données.

Par exemple:

$my_string = filter_input(INPUT_GET, 'my_string', FILTER_SANITIZE_STRING); 

En savoir plus à ce sujet dans cet article here.

Pour les requêtes SQL, il est fortement recommandé d'utiliser PDO avec des instructions préparées pour protéger contre les injections SQL. Vous pouvez lire sur PDO dans le manuel PHP here.

Questions connexes