Quel est le degré de sécurité de cette déclaration MySQL dans un script PHP?
-
05-07-2019 - |
Question
Quel est le degré de sécurité de cette déclaration MySQL dans un fichier PHP? Serait-il vulnérable à une injection SQL?
$sql = sprintf("INSERT IGNORE INTO my_table VALUES(%d, %d, 1, NOW())",
mysql_escape_string( Quel est le degré de sécurité de cette déclaration MySQL dans un fichier PHP? Serait-il vulnérable à une injection SQL?
<*>SESSION['client']['id']),
mysql_escape_string( Quel est le degré de sécurité de cette déclaration MySQL dans un fichier PHP? Serait-il vulnérable à une injection SQL?
<*>POST['id']));
La solution
Oui, car% d donne uniquement un nombre, il n'est pas nécessaire d'échapper à la chaîne. L'utilisation de guillemets simples fournirait également une amélioration de la vitesse. Donc, un moyen sûr et rapide est:
$sql = sprintf('INSERT IGNORE INTO my_table VALUES(%d, %d, 1, NOW())', Oui, car% d donne uniquement un nombre, il n'est pas nécessaire d'échapper à la chaîne. L'utilisation de guillemets simples fournirait également une amélioration de la vitesse. Donc, un moyen sûr et rapide est:
<*>SESSION['client']['id'], Oui, car% d donne uniquement un nombre, il n'est pas nécessaire d'échapper à la chaîne. L'utilisation de guillemets simples fournirait également une amélioration de la vitesse. Donc, un moyen sûr et rapide est:
<*>POST['id']);
Autres conseils
Non, cela ne devrait pas être vulnérable.
Voici un article détaillé sur la sécurisation de vos requêtes SQL dans PHP .
http: //www.tech- evangelist.com/2007/11/05/preventing-sql-injection-attack/
Cela me semble bien.
En fait, est-il nécessaire d'utiliser mysql_escape_string dans ce cas, car sprintf ("% d") ne peut générer qu'un nombre?