Mysql
 sql >> Base de données >  >> RDS >> Mysql

Meilleur moyen de sécuriser la requête SQL en PHP

La requête que vous avez montrée dans la question n'utilise pas les valeurs fournies par l'utilisateur, il n'y a donc pas de cas d'injection SQL mais dans un cas général :-

Tout d'abord, vous devez valider tous l'entrée de l'utilisateur (noms d'utilisateur, e-mails, etc.) avant de l'utiliser dans une requête. Par exemple :- Si vous n'avez autorisé que des caractères alphanumériques dans un nom d'utilisateur, vous devez vérifier si l'entrée est réellement alphanumérique ou non avant de procéder à la création d'une requête de base de données et vous devez également vérifier la taille de toutes les entrées.

Après cela, à mon avis, les instructions préparées sont le meilleur choix pour empêcher l'injection SQL.

Problème avec mysql_real_escape_string() :-

Comme mysql_real_escape_string() échappe les caractères selon le jeu de caractères par défaut, c'est donc mieux que la fonction addslashes() et il désinfecte correctement Injections SQL résultant d'un abus de jeux de caractères multi-octets , mais dans un autre article ici , un scénario de contournement s'affiche et explique que l'injection peut toujours être effectuée.

Solution :-

Ainsi, la meilleure et la meilleure façon d'empêcher l'injection SQL consiste à utiliser des instructions préparées. Il s'agit d'une technique dans laquelle les instructions SQL sont précompilées avant l'insertion de l'entrée utilisateur (paramètres) et sont traitées comme des modèles SQL réutilisables. Ainsi, il sépare l'entrée utilisateur du code SQL réel et l'analyseur SQL n'analyse jamais l'entrée utilisateur.

Outre la sécurité, il optimise également la requête SQL pour la vitesse. Cela aide dans les cas où vous devez exécuter la même requête plusieurs fois avec différentes entrées utilisateur.

Vous pouvez vous référer au manuel PHP pour plus de détails sur la mise en œuvre.