Mysql: injection sql, addslashes?

Mysql: injection sql, addslashes? - réseaux et sécurité - Linux et OS Alternatifs

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? ( :lol: )
 

Citation :


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 :jap:


Message édité par kryzantem le 07-06-2007 à 23:19:36
Reply

Marsh Posté le 07-06-2007 à 23:16:20   

Reply

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

Reply

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 ! :d)
 
a+


Message édité par kryzantem le 08-06-2007 à 12:03:37
Reply

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.

Reply

Marsh Posté le 09-06-2007 à 14:58:35    

d'accord mais est-il possible de bypasser la requête?

Reply

Marsh Posté le 09-06-2007 à 20:48:21    

cat prog

Reply

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)

Reply

Marsh Posté le 10-06-2007 à 20:16:05    

Les mysql_* ça fait longempts que ça a été remplécé par les mysqli_*

Reply

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? :d
 
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...?
 
+

Reply

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.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed