2 votes

Échapper de manière sûre une variable dans une requête SQL brute

Je me demande juste si ce qui suit est totalement sûr ou si quelqu'un peut le contourner en utilisant des caractères hexadécimaux, etc :

$name = mysql_real_escape_string(htmlentities(stripslashes($_REQUEST['name'])));
$query ="SELECT * FROM Games WHERE name LIKE '%{$name}%'";

Merci.

Je sais que je peux utiliser PEAR et d'autres bibliothèques pour faire des déclarations pré-parées. Cependant, cette question concerne spécifiquement les requêtes brutes.

7voto

ovais.tariq Points 1965

Mysql_real_escape_string fait l'affaire, ..,

[EDIT]

pour l'utilisation des chaînes de caractères :

$str = mysql_real_escape_string($input);

pour les valeurs numériques, il suffit de faire un casting de type :

$val = (int)$input;

3voto

canni Points 1748

Utilisez les déclarations préparées paramétrées, avec PDO, cela vous donnera le moyen le plus sûr d'envoyer des requêtes, que PHP peut offrir, et vous n'aurez pas du tout à vous occuper de l'échappement, en utilisant cette méthode.

2voto

Pour le SQL, il suffit de

$name = mysql_real_escape_string($_REQUEST['name']);
$query ="SELECT * FROM Games WHERE name LIKE '%$name%'";

est suffisant.

De plus, l'utilisation de htmlentities et de stripslashes est inutile et boguée.
Je doute que vous vouliez chercher Dankeschön au lieu de Dankeschön par exemple.

Note que mysql_real_escape_string ne fonctionne évidemment que pour les chaînes citées.

$num = mysql_real_escape_string($_REQUEST['num']);
$query ="SELECT * FROM Games WHERE salary > $num;

serait pas aide

Pour les autres utilisations, il peut y avoir d'autres validations.

0voto

Leon Points 679

Mysql_real_escape_string est suffisant ici et puisque vous l'avez étiqueté avec xss, lorsque vous le lisez depuis la base de données et que vous l'affichez en html, utilisez Identités html pour éviter le xss.

0voto

mario Points 76989

Soit utiliser le SQL paramétré, soit appliquer input filtrage :

$query = "SELECT * FROM Games WHERE name LIKE '%{$_REQUEST->sql['name']}%'";

L'évasion manuelle est un style plutôt mauvais, car on l'oublie trop facilement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X