Est htmlspecialchars assez pour éviter une injection SQL dans une variable entre guillemets simples?
Bien que de nombreuses sources de citer le htmlspecialchars
fonction avec ENT_QUOTES
être pas assez pour empêcher l'injection SQL, aucun d'entre eux fournissent une preuve de concept. Je ne vois pas de possibilité pour moi-même.
Considérons l'exemple suivant:
$username = htmlspecialchars($_GET['name'], ENT_QUOTES, 'UTF-8');
$sql = "SELECT * from user WHERE name='$username'";
mysql_query($sql,...);
Quelqu'un peut-il donner un exemple, AUTRES que ceux couverts par le cas lorsque L'injection SQL est mysql_real_escape_string()?
pourquoi ne demandez-vous?
suffit d'utiliser mysqli
ce mysql_real_escape_string?
PHP
suffit d'utiliser mysqli
ce mysql_real_escape_string?
PHP
htmlspecialchars
fonction est pour échapper les caractères qui ont une signification spéciale navigateur, tels que des crochets, pour les faire apparaître comme des caractères normaux au lieu d'être interprété comme le balisage HTML. Il a rien pour faire avec SQL ou la prévention de l'injection SQL.OriginalL'auteur crenate | 2014-03-01
Vous devez vous connecter pour publier un commentaire.
Le personnage que
htmlspecialchars
ne parvient pas à coder le caractère critique\0
(NUL byte),\b
(retour arrière), ainsi que la\
caractère.Afin d'en tirer parti, vous avez besoin d'une déclaration auprès de plusieurs points d'injection. Avec cela, vous pouvez échapper à la clôture délimiteur de chaîne de caractères littérale et donc de l'étendre jusqu'à la prochaine délimiteur de départ de la prochaine chaîne littérale. Trois littéraux de chaîne avec chacune un point d'injection peut ensuite être transformé en deux littéraux de chaîne.
Par exemple:
Maintenant avec les valeurs suivantes:
La déclaration ressemble à ceci:
Qui est équivalent à:
OriginalL'auteur Gumbo
Les chaînes ne sont pas la seule chose SQL interagit avec.
C'est là que les requêtes paramétrées sont très pratiques.
Oui, c'est pourquoi vous devez utiliser des requêtes paramétrées dans MySQLi ou PDO.
mysql_real_escape_string
est obsolète avec le reste demysql_
fonctions. J'ai fourni un exemple par votre question - une situation oùhtmlspecialchars
sur la saisie de l'utilisateur ne restitue pas la requête SQL coffre-fort. La question ne mentionne pasmysql_real_escape_string
à tous.Je pense qu'il s'attend à ce que l'entrée de $_GET['id'] peut conduire à l'Injection SQL, si
htmlspecialchars
est utilisé avecENT_QUOTES
Dans cet exemple,
$_GET['id']
être1 OR 1=1
travail comme l'injection, ethtmlspecialchars
n'affecte pas du tout.OriginalL'auteur ceejayoz