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

  FORUM HardWare.fr
  Programmation
  PHP

  Ce code est-il sécurisé ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Ce code est-il sécurisé ?

n°1446700
Zipo
Ours bipolaire
Posté le 24-09-2006 à 04:03:40  profilanswer
 

Bonjour, je me suis lancé dans la prog web (j'ai horreur de ça mais c'est surement parceque je manque cruellement de pratique, pour être franc je me suis lancé dans une petite gestion d'utilisateurs, pour mettre un peu les mains dans le cambouis :)
Ca marche, par contre je me demande si c'est vraiment sécurisé ?
 
En gros l'utilisateur se connecte sur une page où il fournit son identifiant et mot de passe, puis il arrive ici :

Code :
  1. <?php session_start();
  2. include("config_sql.php" );
  3. mysql_connect($DBhost, $DBusr, $DBpwd);
  4. mysql_select_db($DB);
  5. $retour = mysql_query('SELECT pass FROM connect_table WHERE login LIKE "' . $id . '"');
  6. $donnees = mysql_fetch_array($retour);
  7. if(($donnees['pass'] == $passwd) and ($passwd != "" )){
  8. $_SESSION['login'] = $id;
  9. header('Location: ok.php');
  10. }
  11. else{
  12. header('Location: ko.php');
  13. }
  14. ?>


 
et ensuite pour chaque page que je veux protéger je mets cet entête :
 

Code :
  1. <?php session_start();
  2. if($_SESSION['login'] == "" ){
  3. header('Location: ko.php');
  4. }
  5. ?>
  6. ...blabla...


 
et pour se déconnecter :
 

Code :
  1. <?php session_start();
  2. session_destroy();
  3. header('Location: connexion.php');
  4. ?>


 
soyez indulgents :d
qu'est ce qui pourrait être source d'ennuis dans ce genre de code ?
Merci :)


Message édité par Zipo le 24-09-2006 à 04:05:34
mood
Publicité
Posté le 24-09-2006 à 04:03:40  profilanswer
 

n°1446705
CNeo
Posté le 24-09-2006 à 09:27:29  profilanswer
 

Ca m'interesse aussi.

n°1446706
gatsu35
Blablaté par Harko
Posté le 24-09-2006 à 09:31:16  profilanswer
 

au niveau de :  
$retour = mysql_query('SELECT pass FROM connect_table WHERE login LIKE "' . $id . '"');
on pourrait facilement faire une sql injection  
en mettant du SQL dans le champ du login on pourrait faire n'importe quoi ici.
donc un simple :  
mysql_real_escape_string($id) pourrait t'être utile

n°1446776
Zipo
Ours bipolaire
Posté le 24-09-2006 à 14:28:12  profilanswer
 

merci c'est exactement le genre d'infos que j'attendais :jap:
 
à titre informatif, que pourrait injecter l'utilisateur dans $id qui ferait foirer ma requête ?  
parceque je comprend bien les injections lorsque l'utilisateur met un début de commentaires pour masquer une condition (WHERE) ou un AND/OR, mais là comme il y a rien derrière le LIKE je vois pas trop ... ?
 
merci en tout cas :)

n°1446777
limp15000
www.geneva-racing.ch
Posté le 24-09-2006 à 14:30:48  profilanswer
 

Moi ma remarque serait...  
Pourquoi mettre  

Code :
  1. <?php session_start();


sur toutes les pages? Tu mets ça sur la première page et quand tu veux détruire la session tu mets le session

Code :
  1. session_destroy


Voilà ;)

Message cité 2 fois
Message édité par limp15000 le 24-09-2006 à 14:32:09
n°1446779
gatsu35
Blablaté par Harko
Posté le 24-09-2006 à 14:33:52  profilanswer
 

limp15000 a écrit :

Moi ma remarque serait...  
Pourquoi mettre  

Code :
  1. <?php session_start();


sur toutes les pages? Tu mets ça sur la première page et quand tu veux détruire la session tu mets le session

Code :
  1. session_destroy


Voilà ;)


parce qu'il faut appeler session_start sur chaque page qui utilisera la session  
 
http://fr.php.net/session_start

n°1446780
Zipo
Ours bipolaire
Posté le 24-09-2006 à 14:35:06  profilanswer
 

limp15000 a écrit :

Moi ma remarque serait...  
Pourquoi mettre  

Code :
  1. <?php session_start();


sur toutes les pages? Tu mets ça sur la première page et quand tu veux détruire la session tu mets le session

Code :
  1. session_destroy


Voilà ;)


euh d'après ce que j'ai lu, on ne peut pas utiliser $_SESSION sur les pages qui ne commencent pas par <?php session_start(); :)
d'où l'obligation de le mettre sur toutes les pages où je me sers des variables sessions
 
Voilà, mais bon si qqn veut confirmer ça serait bien :d

n°1446781
Zipo
Ours bipolaire
Posté le 24-09-2006 à 14:35:18  profilanswer
 

ah ben grillé :o :d

n°1446784
Zipo
Ours bipolaire
Posté le 24-09-2006 à 14:42:50  profilanswer
 

gatsu35 a écrit :

au niveau de :  
$retour = mysql_query('SELECT pass FROM connect_table WHERE login LIKE "' . $id . '"');
on pourrait facilement faire une sql injection  
en mettant du SQL dans le champ du login on pourrait faire n'importe quoi ici.
donc un simple :  
mysql_real_escape_string($id) pourrait t'être utile


 

Zipo a écrit :

à titre informatif, que pourrait injecter l'utilisateur dans $id qui ferait foirer ma requête ?  
parceque je comprend bien les injections lorsque l'utilisateur met un début de commentaires pour masquer une condition (WHERE) ou un AND/OR, mais là comme il y a rien derrière le LIKE je vois pas trop ... ?


ah si je pense avoir compris : si l'utilisateur finit correctement la requête et en écrit une autre juste derrière ?  
par exemple pour $id :

Code :
  1. toto"; SELECT * from connect_table;


j'ai bon ?

n°1446787
mIRROR
Chevreuillobolchévik
Posté le 24-09-2006 à 14:46:29  profilanswer
 

par contre a la place de like tu mets =  
si t as -exemple bidon- toto et toti comme users ca risque de planter

mood
Publicité
Posté le 24-09-2006 à 14:46:29  profilanswer
 

n°1446788
limp15000
www.geneva-racing.ch
Posté le 24-09-2006 à 14:49:27  profilanswer
 

J'ai rien dit... Vais me recoucher... :P

n°1446790
Zipo
Ours bipolaire
Posté le 24-09-2006 à 14:55:19  profilanswer
 

mIRROR a écrit :

par contre a la place de like tu mets =  
si t as -exemple bidon- toto et toti comme users ca risque de planter


ah oui exellent merci :jap:

n°1446791
Zipo
Ours bipolaire
Posté le 24-09-2006 à 14:55:45  profilanswer
 

limp15000 a écrit :

J'ai rien dit... Vais me recoucher... :P


dur dur de s'y mettre un dimanche hein :d

n°1446795
nargy
Posté le 24-09-2006 à 15:29:11  profilanswer
 

Si tu est parano:
http://fr2.php.net/crypt
explique comment éviter que les mots de passe soient volés en cas de hack.

n°1446799
supermofo
Hello World !
Posté le 24-09-2006 à 15:47:23  profilanswer
 

Y parait que Joomla securise au niveau militaire ?

n°1446803
gatsu35
Blablaté par Harko
Posté le 24-09-2006 à 15:54:55  profilanswer
 

supermofo a écrit :

Y parait que Joomla securise au niveau militaire ?


tu arrêtes de saouler ton monde avec Joomla ?

n°1446982
KrisCool
“Verbeux„
Posté le 25-09-2006 à 09:48:28  profilanswer
 

supermofo a écrit :

Y parait que Joomla securise au niveau militaire ?


 
Y paraît que:
1- "sécurisé au niveau militaire" c'est risible
2- on s'en branle d'un n-ième CMS parmi d'autres qui est juste un fork de Mambo avec une forte dose d'évangélisme [:mlc]


---------------
Loose Change Lies | Bars | Last.fm
n°1446987
chani_t
From Dune
Posté le 25-09-2006 à 09:56:03  profilanswer
 

de même tu peux mettre un session_regenerate_id(); lors du log, afin de changer le N° de ta session et donc d'éviter une partie d'un vol de session.

n°1447314
supermofo
Hello World !
Posté le 25-09-2006 à 20:51:30  profilanswer
 

Ouais ...
 
session_regenerate_id : ne detruit pas la session precedente.
 
Au final ton système de session devient une passoire  :pfff:

Message cité 1 fois
Message édité par supermofo le 25-09-2006 à 20:51:55
n°1447367
KrisCool
“Verbeux„
Posté le 25-09-2006 à 22:54:47  profilanswer
 

supermofo a écrit :

Ouais ...
 
session_regenerate_id : ne detruit pas la session precedente.
 
Au final ton système de session devient une passoire  :pfff:


 
Suffit de brancher le cerveau et de lire 2 secondes les commentaires dans la doc php.
Ceci dit mea culpa, je pensais que le comportement en php 4 était de détruire quand même la session.


---------------
Loose Change Lies | Bars | Last.fm
n°1448742
Badze
Aime les frites
Posté le 28-09-2006 à 13:48:19  profilanswer
 

la fonction md5($password) pourra t'être utile pour le cryptage de ton password


Message édité par Badze le 28-09-2006 à 13:48:28
n°1448776
Zipo
Ours bipolaire
Posté le 28-09-2006 à 14:24:13  profilanswer
 

oui merci :)
 
Dailleurs ça m'amène à vous poser une question : que penser des sites qui nous retournent notre mot de passe par mail lorsque l'on clique sur le traditionnel "J'ai oublié mon mot de passe" ?
 
Certains d'entre eux nous renvoient un nouveau mot de passe puisque le notre n'est pas stocké par défaut dans leur bdd, ils ne conservent que la version hashée :) mais d'autres nous renvoie notre mot de passe en clair... ce qui signifie qu'ils stockent notre pass non hashé dans la bdd ? :/

n°1448796
KrisCool
“Verbeux„
Posté le 28-09-2006 à 14:34:18  profilanswer
 

Zipo a écrit :

oui merci :)
 
Dailleurs ça m'amène à vous poser une question : que penser des sites qui nous retournent notre mot de passe par mail lorsque l'on clique sur le traditionnel "J'ai oublié mon mot de passe" ?
 
Certains d'entre eux nous renvoient un nouveau mot de passe puisque le notre n'est pas stocké par défaut dans leur bdd, ils ne conservent que la version hashée :) mais d'autres nous renvoie notre mot de passe en clair... ce qui signifie qu'ils stockent notre pass non hashé dans la bdd ? :/


 
Soit il est stocké non hashé dans la bdd, soit il est stocké crypté dans la bdd et décrypté uniquement quand tu le demandes. En même temps, si la base est compromise, c'est pas d'avoir hashé le password en md5 qui va apporter une quelconque protection. Ca rend la récupération du password non triviale, mais c'est pas bien compliqué quand même.


---------------
Loose Change Lies | Bars | Last.fm
n°1448797
weezo
Posté le 28-09-2006 à 14:35:49  profilanswer
 

Zipo a écrit :

oui merci :)
 
Dailleurs ça m'amène à vous poser une question : que penser des sites qui nous retournent notre mot de passe par mail lorsque l'on clique sur le traditionnel "J'ai oublié mon mot de passe" ?
 
Certains d'entre eux nous renvoient un nouveau mot de passe puisque le notre n'est pas stocké par défaut dans leur bdd, ils ne conservent que la version hashée :) mais d'autres nous renvoie notre mot de passe en clair... ce qui signifie qu'ils stockent notre pass non hashé dans la bdd ? :/


 
Ils peuvent le stocker crypté.
Ca permet de s'assurer que si seulement la base de données est compromise,  les mots de passe ne seront pas menacés.
Par contre si le site complet est hacké...
 
PS : pour la sécurisation des scripts et des sessions, sans redonner toutes les techniques (il y a plein de tutoriaux sur le sujet un peu partout), il y a toujours la solution de stocker l'adresse IP dans la session et de la comparer à l'adresse du client à chaque nouvel appel de script. Ca peut déjà éviter pas mal de problèmes...


---------------
http://weezo.net
n°1448816
omega2
Posté le 28-09-2006 à 14:49:25  profilanswer
 

Weezo > Et ca permet aussi d'empécher l'accés aux zones protégés à ceux qui voient leurs Ip changer n'importe quand (AOL bonjour)

n°1448818
KrisCool
“Verbeux„
Posté le 28-09-2006 à 14:49:53  profilanswer
 

weezo a écrit :

PS : pour la sécurisation des scripts et des sessions, sans redonner toutes les techniques (il y a plein de tutoriaux sur le sujet un peu partout), il y a toujours la solution de stocker l'adresse IP dans la session et de la comparer à l'adresse du client à chaque nouvel appel de script. Ca peut déjà éviter pas mal de problèmes...


 
Déjà proposé sur un autre topic, mais quelqu'un a fait remarquer à juste titre que les usagers d'AOL en feront les frais (puisque leur connexion peut passer par divers proxies qui changent en continu).


---------------
Loose Change Lies | Bars | Last.fm
n°1448830
leflos5
On est ou on est pas :)
Posté le 28-09-2006 à 14:58:38  profilanswer
 

KrisCool a écrit :

Soit il est stocké non hashé dans la bdd, soit il est stocké crypté dans la bdd et décrypté uniquement quand tu le demandes. En même temps, si la base est compromise, c'est pas d'avoir hashé le password en md5 qui va apporter une quelconque protection. Ca rend la récupération du password non triviale, mais c'est pas bien compliqué quand même.


Les stocker en clair c'est de l'hérésie :o
 
Si la base est compromise, tu feras pas grand chose d'un hash ;) A moins d'avoir vraiment beaucoup à gagner et d'avoir aussi le script, beaucoup de temps à perdre sans garantie et surtout une puissance de calcul suffisante :)

n°1448834
leflos5
On est ou on est pas :)
Posté le 28-09-2006 à 15:01:09  profilanswer
 

Zipo a écrit :

oui merci :)
 
Dailleurs ça m'amène à vous poser une question : que penser des sites qui nous retournent notre mot de passe par mail lorsque l'on clique sur le traditionnel "J'ai oublié mon mot de passe" ?
 
Certains d'entre eux nous renvoient un nouveau mot de passe puisque le notre n'est pas stocké par défaut dans leur bdd, ils ne conservent que la version hashée :) mais d'autres nous renvoie notre mot de passe en clair... ce qui signifie qu'ils stockent notre pass non hashé dans la bdd ? :/


Spa bien ça, ne serait - ce que par principe, même si t'as accès aux données sans le dit mdp, je veux pas connaitre le mdp de qui que ce soit :)

n°1448846
KrisCool
“Verbeux„
Posté le 28-09-2006 à 15:07:55  profilanswer
 

leflos5 a écrit :

Les stocker en clair c'est de l'hérésie :o
 
Si la base est compromise, tu feras pas grand chose d'un hash ;) A moins d'avoir vraiment beaucoup à gagner et d'avoir aussi le script, beaucoup de temps à perdre sans garantie et surtout une puissance de calcul suffisante :)


 
Pas faire grand chose d'un hash ? Si la fonction de hachage a été appliquée bêtement comme c'est le cas dans la grosse majorité des cas, un procédé comme les rainbow tables permet de trouver un mot de passe sans avoir besoin d'une puissance de calcul énorme, et ce dans des temps raisonnables.
 
Donc oui c'est parfaitement exploitable un hash. Après on peut effectivement éviter ce genre de problèmes. En mettant du "sel" (cf article wikipedia) par exemple ou en utilisant autre chose qu'une fonction de hachage (cryptage).
Faut pas croire que ça n'arrive que dans des films. Sur le site web de ma guilde de MMO, une appli php non sécurisée (associée à une mauvaise configuration du cookie du forum) a permis à un mec de voler le cookie de forum de l'admin contenant le hash md5 du password, puis il a retrouvé le pass par une attaque à la rainbow table, et il a foutu le bordel tant qu'il a pu.
 
Donc la sécurité apportée par un hachage de password dans la BDD, c'est tout relatif.
Edit: après, pour simplement le masquer aux yeux de personnes de confiance, dont l'admin de la BDD, oui.

Message cité 1 fois
Message édité par KrisCool le 28-09-2006 à 15:08:41

---------------
Loose Change Lies | Bars | Last.fm
n°1448853
chani_t
From Dune
Posté le 28-09-2006 à 15:17:42  profilanswer
 

C'est pour ça que j'aurais tendance à dire... chiffrement du mot de passe par un algorithme à sens unique, et éventuellement avec un salt aléatoire en plus. la possibilité de retrouver le mot de passe original est proche de 0 même avec le mot de passe crypter et le salt. (crypt(motdepasse, '$2$0123456789012'); )

n°1448863
leflos5
On est ou on est pas :)
Posté le 28-09-2006 à 15:26:11  profilanswer
 

KrisCool a écrit :

Pas faire grand chose d'un hash ? Si la fonction de hachage a été appliquée bêtement comme c'est le cas dans la grosse majorité des cas, un procédé comme les rainbow tables permet de trouver un mot de passe sans avoir besoin d'une puissance de calcul énorme, et ce dans des temps raisonnables.
 
Donc oui c'est parfaitement exploitable un hash. Après on peut effectivement éviter ce genre de problèmes. En mettant du "sel" (cf article wikipedia) par exemple ou en utilisant autre chose qu'une fonction de hachage (cryptage).
Faut pas croire que ça n'arrive que dans des films. Sur le site web de ma guilde de MMO, une appli php non sécurisée (associée à une mauvaise configuration du cookie du forum) a permis à un mec de voler le cookie de forum de l'admin contenant le hash md5 du password, puis il a retrouvé le pass par une attaque à la rainbow table, et il a foutu le bordel tant qu'il a pu.
 
Donc la sécurité apportée par un hachage de password dans la BDD, c'est tout relatif.
Edit: après, pour simplement le masquer aux yeux de personnes de confiance, dont l'admin de la BDD, oui.


Je ne connaissais pas l'existence de ses rainbow tables  :ouch: MAintenant on est d'accord que de toutes manières, quand on parle de sécurité il faut pas se satisfaire du minimum :)
 
De toutes manières si le vol de session/cookie est rendu quasi impossible et le serveur/script sécurisé comme il faut, le risque de se faire voler quoi que ce soit est largement assez faible si t'as pas des dossiers secret/défense à cacher :d
 
Puis un détail con, celui qui veut facilement un mdp, il a qu'à le ramasser au moment où il est encore en clair s'il le veut vraiment :ange:  

n°1448893
KrisCool
“Verbeux„
Posté le 28-09-2006 à 16:04:31  profilanswer
 

leflos5 a écrit :

Je ne connaissais pas l'existence de ses rainbow tables  :ouch: MAintenant on est d'accord que de toutes manières, quand on parle de sécurité il faut pas se satisfaire du minimum :)
 
De toutes manières si le vol de session/cookie est rendu quasi impossible et le serveur/script sécurisé comme il faut, le risque de se faire voler quoi que ce soit est largement assez faible si t'as pas des dossiers secret/défense à cacher :d
 
Puis un détail con, celui qui veut facilement un mdp, il a qu'à le ramasser au moment où il est encore en clair s'il le veut vraiment :ange:


 
Attention à toujours garder un certain sens de la mesure au niveau sécurité. Le cas concret auquel j'ai été confronté, c'est un mec avec un minimum de connaissances qui voulait vandaliser un site. Et il a réussi. Y'avait rien à voler, aucune info sensible, rien hein. Juste une volonté de mal faire d'un mec. Ca peut arriver à n'importe qui.
 
Après, pour que le mec réussisse à chopper le mot de passe en clair, c'est autre chose, ça requiert d'autres moyens que d'utiliser une faille existante pour se procurer un cookie.


---------------
Loose Change Lies | Bars | Last.fm
n°1449016
supermofo
Hello World !
Posté le 28-09-2006 à 18:37:13  profilanswer
 

Sur la totalité des sites ( yahoo , google , tous les forums possibles ) le hash est stocke dans un cookie. Avoir ce hash te permet de te logguer sans connaitre le mot de passe. Quelquefois tu px meme changer le pass ou l 'email ou arrivera le mot de passe.
 
J en ai fais pleurer plus d'un avec des cookies forgés. La seule difficulté dans l'attaque étant de trouver ou placer son XSS .
 
En gros tous les sites ou tu vois "mémoriser mon mot de passe" sont des cibles potentielles. De plus il n'y a aucune securisation du cookie en lui meme. En gros tu px très bien mettre en place un brute force qui fonctionnera à plein pot en passant par les cookies plutot que le formulaire ( qui lui a souvent la mauvaise tendance a etre plus securisé qu'ailleurs ).


Message édité par supermofo le 28-09-2006 à 18:42:06
n°1449027
WiiDS
20 titres en GC, 0 abandon, 0 DQ
Posté le 28-09-2006 à 19:03:53  profilanswer
 

Une question sur mysql_real_escape_string :
 
Faut t-il mettre pour, par exemple la variable $utilisateur :
 
- Ca : $utilisateur = mysql_real_escape_string($utilisateur);
- Ou bien : mysql_real_escape_string($utilisateur);


---------------
"I can cry like Roger. It's just a shame I can't play like him" - Andy Murray, 2010
n°1449029
WiiDS
20 titres en GC, 0 abandon, 0 DQ
Posté le 28-09-2006 à 19:05:04  profilanswer
 

supermofo a écrit :

Y parait que Joomla securise au niveau militaire ?


Joomla est juste un CMS, bourré de failles qui plus est et aucun rapport avec le topic ...


---------------
"I can cry like Roger. It's just a shame I can't play like him" - Andy Murray, 2010
n°1449083
KrisCool
“Verbeux„
Posté le 28-09-2006 à 20:03:38  profilanswer
 

WiiDS a écrit :

Une question sur mysql_real_escape_string :
 
Faut t-il mettre pour, par exemple la variable $utilisateur :
 
- Ca : $utilisateur = mysql_real_escape_string($utilisateur);
- Ou bien : mysql_real_escape_string($utilisateur);


 
Lis la doc  [:pingouino]  
 
Valeurs de retour
Retourne la chaîne échappée (...)


---------------
Loose Change Lies | Bars | Last.fm
n°1449089
WiiDS
20 titres en GC, 0 abandon, 0 DQ
Posté le 28-09-2006 à 20:25:31  profilanswer
 

KrisCool a écrit :

Lis la doc  [:pingouino]  
 
Valeurs de retour
Retourne la chaîne échappée (...)


 :jap: merci :hello:


---------------
"I can cry like Roger. It's just a shame I can't play like him" - Andy Murray, 2010
mood
Publicité
Posté le   profilanswer
 


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

  Ce code est-il sécurisé ?

 

Sujets relatifs
au sujet de code barreafficher le n° de la ligne de code
code bouton envoyer (newsletter)Voir le code HTML generer par une trasnformation xls
PHP - code moteur de recherche : ça coince!Quelqu'un pour corriger mon code
génération du code sous DBDesigner[Windows Sokets] {résolu} un prob de compilation avec code::blocks
Probleme avec mon code source pour les socketsupload depuis code php sur serveur sécurisé ???
Plus de sujets relatifs à : Ce code est-il sécurisé ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR