Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1684 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  sql injection

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

sql injection

n°1499283
PierreC
Posté le 05-01-2007 à 12:58:28  profilanswer
 

bonjour,
  je suis en train d'analyser (et de decortiquer) un projet opensource dont je fais le fork et sur la page de login je trouve ce code (extrait) :


$login=isset($_POST['login'])?$_POST['login']:"";
$sql = "select pwd from " . $tblpref ."user where login= '$login'";


 
et j'essaye d'explique au createur du projet qu'il y a potentiellement une faille par "sql injection". La theorie est là mais pas la pratique, il ne veux donc pas prendre le probleme au serieux.
 
c'est moi qui fume ou bien y'a vraiment un risque ? le simple fait d'utiliser les simple quot ' suffit t'il à se proteger ? avez vous une demo à me proposer,  
j'ai deja essayé de saisir dans le champ login ceci (donc la variable $login) prendrai cette valeur.

toto' UNION SELECT * FROM factux_client OUTFILE /var/www/html/base_client


mais ca marche pas a cause des simples quot
 
PS : je fournit la page complet à ceux qui le desire, mais pas en public car avec on peut remonter au projet initiale ce qui n'est pas bon pour les sites deja en production.
 
Pierre

mood
Publicité
Posté le 05-01-2007 à 12:58:28  profilanswer
 

n°1499284
PierreC
Posté le 05-01-2007 à 13:08:02  profilanswer
 

bon ok j'ai trouvé il faut saisir ceci :


toto' UNION SELECT nom FROM factux_client INTO OUTFILE '/var/www/html/dump_cli


 
si l'admin de "forum.hardware" considere qu'il faut ferme ce post y'a aucun probleme

n°1499293
sircam
I Like Trains
Posté le 05-01-2007 à 13:37:27  profilanswer
 

Indique "résolu" dans le titre et tu n'auras rien à craindre. :jap:
 
Qqn qui ne prend pas au sérieux un risque d'injection SQL est qqn de pas sérieux...

n°1499300
FlorentG
Posté le 05-01-2007 à 13:53:44  profilanswer
 

Ca dépend. Si magic_quotes_gpc est à On, la variable login sera quottée... Maintenant si elle est à Off, effectivement il y a faille. On ou Off, suivant l'encoding de la base, pouet.

 

Donc là c'est effectivement n'importe quoi... On utilisera plutôt un truc du genre :

Code :
  1. function varPost($var)
  2. {
  3.   $value = isset($_POST[$var]) ? $_POST[$var] : '';
  4.   return (get_magic_quotes_gpc() ? stripslashes($value) : $value);
  5. }
  6. ...
  7. $sql = 'SELECT `pwd` FROM ' . $tblpref . 'user WHERE `login`=\'' . mysql_real_escape_string(varPost('login')) . '\'';
 

On peut encore mieux faire, style prepared statements ou autres trucs genre sprintf. Pareil pour la récupération d'un truc dans post, on peut pré-nettoyer le tableau entier en début d'application.

 

Mais là comme ça c'est clairement le code d'un débutant ou quelqu'un pas trop soucieux de ce qu'il fait :/


Message édité par FlorentG le 05-01-2007 à 13:54:15
n°1499503
PierreC
Posté le 05-01-2007 à 18:45:33  profilanswer
 

un p'ti article sympa au sujet de la secu open source :  
http://www.zdnet.fr/actualites/inf [...] or=EPR-100

n°1499513
MagicBuzz
Posté le 05-01-2007 à 18:57:48  profilanswer
 

Faire confiance à MagicQuote, c'est selon moi une connerie monumentale.
 
Et ce, pour deux trois raisons :
1/ MagicQuote remplace les ' par des \', ce qui n'est pas supporté par tous les SGBD, car c'est ANSI et non SQL.
2/ Si sur le serveur de DEV, on a la main pour activer MagicQuote, ce n'est pas forcément le cas pour un serveur de production. C'est d'autant plus vrai le jour où on doit changer d'hébergeur : on ne pense pas forcément à vérifier lorsqu'on souscrit à la nouvelle offre.
3/ Le jour où un gars intervient en maintenance et voit des risques d'injection, il y a de grandes chances pour qu'il tente de blinder la chose. En SQL, l'échappement de ', c'est '' (2x'). Ainsi, le gars va transformer ' en '', puis MagicQuote va re-transformer en \'\'. Ainsi, dans la base, on va avoir 2x'' écrit au lieu d'un seul.
 
Bref, MagicQuote = grosse daube à éviter.
 
+1 pour les prepared statement qui sont les seuls à être réellement efficaces contre les SQL Injection (en plus d'être plus rapides qu'une requête générée comme un sagouin).


Message édité par MagicBuzz le 05-01-2007 à 18:58:13
n°1499609
PierreC
Posté le 05-01-2007 à 23:49:20  profilanswer
 

Mrharry : oui c'est en effet ce genre de secu que j'ai mis en place, j'ai meme interdit l'espace
mais j'aime bien le "alnum" je n'utilise en generale que les codes d'expession reguliere.
Mais ca ne fonctionne bien que pour des champs simple, par pour des champs de saisie complexe tel qu'un message.
 
Merci
 
 
--
OpenDCF : outil de gestion en php Devis/Commandes/Factures : http://opendcf.1g6.biz


Message édité par PierreC le 05-01-2007 à 23:49:41
n°1499706
PierreC
Posté le 06-01-2007 à 12:32:31  profilanswer
 

MagicBuzz : en effet magic quot j'aime pas bcp non plus, mais concernant la demo que je veux faire toute la sécu repose dessus. Je n'ai donc plus de faille direct à proposer à l'auteur de ce code....


---------------
Du tofu en Alsace : www.tofuhong.com

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  sql injection

 

Sujets relatifs
pblm d injection sql[Transact SQL] Injection de SQL et procdure stockée
Script contre injection XSS ?[Sécurité] CrossScripting, SQL injection comment les éviter
insertion dans champ blob et risque d'injection[VB/VBA/VBS] VB injection de commande dans un programme ! bis correct
Cherche pro du SQL (pour sql injection challenge)[SECURITE] L'injection SQL et ses conséquences
Plus de sujets relatifs à : sql injection


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)