Mysql: injection sql, addslashes? - réseaux et sécurité - Linux et OS Alternatifs
Marsh Posté le 08-06-2007 à 09:56:42
c'est pas comme ça qu'on fait une requête. utilise des prepare statements avec des placeholders
Marsh Posté le 08-06-2007 à 12:00:17
j'ai regardé ce que tu m'as dit
http://dev.mysql.com/tech-resource [...] ments.html
et en effet, niveau sécurité ça a l'air top. Je ne cache pas que je débute sous Mysql et j'apprends en même temps que je code.
Sinon, (même si ce n'est pas sûrement pas la meilleure manière de procéder), que pensez-vous de la requête ci-dessus? Est-il possible pour quelqu'un de bypasser une telle requête? J'ai tourné ma requête dans tous les sens et je ne vois vraiment pas comment la bypasser... (ca me rassure ! )
a+
Marsh Posté le 08-06-2007 à 15:58:01
Si tu ne veux pas pas des prepared statements, je pense qu'il vaut mieux utiliser mysqli_escape_string() que addslashes(). Ca sert à la même chose mais c'est spécifique MySQL.
Marsh Posté le 10-06-2007 à 11:39:43
La fonction addslashes est à éviter, il vaut mieux utiliser les fonctions de protection de chaines de caractère spécifiques à chaque bases de données : mysql_real_escape_string pour MySQL, pg_escape_string pour PostgreSQL.
addslashes posent des problèmes avec les chaines de caractères contenant des caractères Unicode, mysql_escape_string ne prend pas en compte le jeu de caracètre de la base de données. Google et php.net te donneront plus d'infos là dessus.
Sinon, comme a dit Taz, le mieux c'est de faire des prepared statements (extension mysqli ou PDO en php)
Marsh Posté le 10-06-2007 à 20:16:05
Les mysql_* ça fait longempts que ça a été remplécé par les mysqli_*
Marsh Posté le 11-06-2007 à 10:46:30
A part indiquer ce qu'il faut utiliser en théorie, quelqu'un pourrait-il illustrer le trou de sécurité lié à ma requête?
OK pour la théorie mais si personne n'est capable de contourner ma requête, à quoi bon m'expliquer qu'elle est insécurisée...?
+
Marsh Posté le 11-06-2007 à 12:30:58
http://ilia.ws/archives/103-mysql_ [...] ments.html
Cette page montre comment exploiter addslashes pour injecter des ' dans une requête SQL, D'ailleurs il montre aussi comment faire la même chose avec mysqli_real_escape_string.
Marsh Posté le 07-06-2007 à 23:16:20
Bonjour,
Dans le cadre de la sécurisation d'une application web, j'essaie de me mettre dans la peau d'un hacker tentant de forcer l'accès de mon site.
Pour faire court, pensez vous que la requête suivante issue de mon code est sûre et suffit à écarter toute menace? ( )
Q="SELECT LOGIN FROM AUTH WHERE USER='".addslashes($_POST['user'])."' AND PASS='".addslashes($_POST['pass'])."';" ;
De plus, j'ai entendu parler de la fonction CHAR(..) de Mysql qui permer d'injecter n'importe quel charactère même avec addslashes. Je souhaiterais avoir la confirmation que ce n'est pas le cas avec des variables non numérique (j'entends par numériques celles qui ne seront précédées par un quote dans la condition,
ex:
WHERE NOMBRE='trois' et WHERE PARAM=3
Merci d'avance pour vos réponses et vos corrections
Message édité par kryzantem le 07-06-2007 à 23:19:36