[PHP/Mysql] Les trous de sécurité de base à éviter

Les trous de sécurité de base à éviter [PHP/Mysql] - PHP - Programmation

Marsh Posté le 12-02-2008 à 22:07:46    

Bonjour, je developpe un site internet "un peu" sensible et donc je souhaite connaître les failles de sécurités les plus connues pour les éviter.
 
Je commence par l'injection SQL :
 
Une page php récupère via un formulaire un login et un pass :
 
<?php
 
// requête SQL typique d'une interface utilisateur
$sql = "SELECT * FROM user_tbl WHERE login = '".$_GET['login']."' AND password = '".$_GET['password']."';
 
?>
 
tout semble aller, sauf que si une personne mal intentionée rentre en login n'importe quoi et en password ' OR password LIKE '% la requete qui est executée devient  SELECT * FROM user_tbl WHERE login = 'toto' AND password = '' OR password LIKE '%' et se retrouve donc loggué sans avoir entré le mdp !
 
Solutions :  

  • Magic quotes sur ON.
  • remplacer les $_GET.. par un mysql_real_escape_string($_GET...)


Avous de citer d'autres failles simples et leurs solutions :)


---------------
Gamertag : Getget94 - PSN : Getget1980 - Nintendo Network : Getget1980 - Uplau : Getget1980
Reply

Marsh Posté le 12-02-2008 à 22:07:46   

Reply

Marsh Posté le 13-02-2008 à 11:36:11    

getget a écrit :


Solutions :  

  • Magic quotes sur ON.
  • remplacer les $_GET.. par un mysql_real_escape_string($_GET...)



Non.
La bonne solution c'est de toujours vérifier l'input utilisateur et d'utiliser des requêtes préparées.


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 13-02-2008 à 21:48:05    

skeye a écrit :

Non.
La bonne solution c'est de toujours vérifier l'input utilisateur et d'utiliser des requêtes préparées.


 
Toutafé !  :sol:  
 
D'ailleurs tu pourrais avoir besoin de ça : http://fr.php.net/pdo


---------------
Directeur Technique (CTO)
Reply

Marsh Posté le 13-02-2008 à 21:49:06    

CyberDenix a écrit :

 

Toutafé !  :sol:

 

D'ailleurs tu pourrais avoir besoin de ça : http://fr.php.net/pdo


...ou au moins mysqli, s'il ne s'agit que de mysql.:o


Message édité par skeye le 13-02-2008 à 21:49:59

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 14-02-2008 à 23:40:51    

skeye a écrit :


Non.
La bonne solution c'est de toujours vérifier l'input utilisateur et d'utiliser des requêtes préparées.


 
Ces solutions sont données par des tas de sites quand tu tapes SQL Injection dans google :/
Tu entends quoi par utiliser des requêtes préparées ?
 
 

CyberDenix a écrit :


 
Toutafé !  :sol:  
 
D'ailleurs tu pourrais avoir besoin de ça : http://fr.php.net/pdo


 
 
 
 
Là, ca va peut être chercher un peu loin pour les besoins :D


---------------
Gamertag : Getget94 - PSN : Getget1980 - Nintendo Network : Getget1980 - Uplau : Getget1980
Reply

Marsh Posté le 15-02-2008 à 00:24:49    

Non parce que quelque chose de bien fait permet de limiter rapidement les effets de bords et autres trous.
 
Ca va même plus loin que pdo en soit (qui ne sert à rien à par faire chier pour un débat conceptuel stérile...), c'est de l'abstraction sur une appli qui est nécessaire.
 
Donc si utilisation de mysql et mysql seul, autant utiliser mysqli qui sera bien plus efficace que pdo ou mysql et s'en servir intelligement (requête préparées pour filtrer, abstraction)

Reply

Marsh Posté le 15-02-2008 à 01:14:02    

Hum, j'ai jeté un œil a mysqli, ça fait peur on dirait de la POO, pas simple quand on est autodidacte et qu'on a  jamais touché à la POO :D
 
A part avoir un niveau d'abstraction supérieur, ça sert à quoi ? (encore PDO je vois à peu près, je peux changer de SGBD sans refaire mon appli), mais mysqli ...


---------------
Gamertag : Getget94 - PSN : Getget1980 - Nintendo Network : Getget1980 - Uplau : Getget1980
Reply

Marsh Posté le 15-02-2008 à 02:58:29    

Merci de ton aide quand même ..... Mr "jmelapète" :pfff:
Je te renvoie vers le lien dans ta signature, point 5 et 7 .....

Message cité 1 fois
Message édité par getget le 15-02-2008 à 03:00:27

---------------
Gamertag : Getget94 - PSN : Getget1980 - Nintendo Network : Getget1980 - Uplau : Getget1980
Reply

Marsh Posté le 15-02-2008 à 07:22:28    

getget a écrit :

 

Ces solutions sont données par des tas de sites quand tu tapes SQL Injection dans google :/
Tu entends quoi par utiliser des requêtes préparées ?

 

J'entends par là rendre à la couche de connexion à la base la responsabilité qui lui revient. Echapper les chaines de caractères c'est son boulot - mais évidemment il faut utiliser une couche d'accès à la base qui sait le faire, d'où mysqli ou PDO.

 
getget a écrit :

Hum, j'ai jeté un œil a mysqli, ça fait peur on dirait de la POO, pas simple quand on est autodidacte et qu'on a  jamais touché à la POO :D

 

ça n'a rien d'extraordinairement compliqué. Et on peut y accéder en mode procédural aussi, il me semble.

 

[edit]

 

Après vérification, oui. Il y a des exemples objet et procéduraux pour chaque fonction dans la doc, cf :
http://fr2.php.net/manual/en/funct [...] repare.php

 
getget a écrit :

A part avoir un niveau d'abstraction supérieur, ça sert à quoi ? (encore PDO je vois à peu près, je peux changer de SGBD sans refaire mon appli), mais mysqli ...

 

à avoir la possibilité d'utiliser des requêtes préparées.


Message édité par skeye le 15-02-2008 à 07:24:25

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 15-02-2008 à 13:11:21    


 
Naturel ou pas pour toi, il connait le procédural et c'est utilisable en procédural. Le reste on s'en fout.


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 15-02-2008 à 13:11:21   

Reply

Marsh Posté le 15-02-2008 à 15:42:22    

Tiens, un lien intéressant sur le top 10 des trous de sécu pour les applis web : http://www.owasp.org/index.php/Top_10_2007


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 15-02-2008 à 16:41:13    

Pour en revenir aux failles, en voici une qu'on voit de plus en plus et qui me fait bien rire : exemple
 :lol:

Reply

Marsh Posté le 15-02-2008 à 17:10:51    

rhoo tout le bordel qu on trouve avec ca, effectivement c'est drole


Message édité par krifur le 15-02-2008 à 17:10:59
Reply

Marsh Posté le 15-02-2008 à 17:14:10    

soju > C'est une grosse faille si ce sont de vrai script php et que le serveur ne gère pas les extensions multiples. Mais ce n'est qu'une petite faille potentielle (potentielle car les risques dépendent de la dernière modif effectué par le développeur) si le serveur gère les extensions multiples.  
Pour les 4 premiers sites indiqués par google, les .php.bak ont l'air de bien être traité comme de simple fichiers php.

Reply

Marsh Posté le 15-02-2008 à 17:19:34    

Regarde les autres sites, tu pourras récupérer plein de mots de passe
 
Tout ça pour dire qu'un serveur apache mal configuré + édition des script directement sur le serveur =  :sweat:  
En sécurité même une mini-faille peut être fatale...

Reply

Marsh Posté le 15-02-2008 à 20:37:08    

Ya deux problèmes :
1) Renommer ses fichiers php avec une extension autre que php
2) Oublier d'interdire la visite les repertoires ou de placer un index.php dans ceux-ci


---------------
Directeur Technique (CTO)
Reply

Marsh Posté le 15-02-2008 à 22:09:33    

oula le truc de malade :|
 
perso je fais tout avec symfony maintenat et du coup plus rien a craindre vu que j'y touche meme pas au répertoire web (racine du vhost)
 
comme quoi un framwork ca sert :D

Reply

Marsh Posté le 15-02-2008 à 23:34:52    

skeye a écrit :


 
Naturel ou pas pour toi, il connait le procédural et c'est utilisable en procédural. Le reste on s'en fout.


 
Merci, c'est exactement ca, je pourrais apprendre la POO, mais pour UNE appliaction, je n'en vois pas l'utilité.
 

Taiche a écrit :

Tiens, un lien intéressant sur le top 10 des trous de sécu pour les applis web : http://www.owasp.org/index.php/Top_10_2007


 
Merci :)
 

soju a écrit :

Pour en revenir aux failles, en voici une qu'on voit de plus en plus et qui me fait bien rire : exemple
 :lol:


 
Et merci aussi !)


---------------
Gamertag : Getget94 - PSN : Getget1980 - Nintendo Network : Getget1980 - Uplau : Getget1980
Reply

Marsh Posté le 17-02-2008 à 14:32:53    

J'ai regardé mysqli, bon, même en OO ca fait pas trop peur, par contre ca alourdit pas mal le code :/
 
Il me semble aussi avoir comprit que ca ne marche pas avec php4 et / ou lysql <4.1 ?


---------------
Gamertag : Getget94 - PSN : Getget1980 - Nintendo Network : Getget1980 - Uplau : Getget1980
Reply

Marsh Posté le 17-02-2008 à 14:43:57    

Ca alourdit rien du tout au lieu d'avoir mysql_* t'as mysqli_* :spamafote:

Reply

Marsh Posté le 17-02-2008 à 19:44:43    

Y'a quand même le prepare en plus et les binds... jusque là je faisais du fetch_array ...


---------------
Gamertag : Getget94 - PSN : Getget1980 - Nintendo Network : Getget1980 - Uplau : Getget1980
Reply

Marsh Posté le 17-02-2008 à 19:52:54    

getget a écrit :

Y'a quand même le prepare en plus et les binds... jusque là je faisais du fetch_array ...


Bin tu peux continuer à les faire, y a rien de nouveau [:spamafote]


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 17-02-2008 à 20:32:32    

getget a écrit :

Y'a quand même le prepare en plus et les binds... jusque là je faisais du fetch_array ...


 :ouch:  
 
1 ligne en plus pour une requête préparée (qui au passage n'est pas lié à mysqli en réalité)...
 
Et c'est pas obligatoire non plus, faut voir l'usage aussi ;)

Reply

Marsh Posté le 17-02-2008 à 20:45:53    

Y'a pas un "bon" site pour passer à mysqli ?
 
J'ai "appris" mysql via phpdebtant.org qui est plutôt bien fait car très abordable, taper direct dans la doc de php c'est un peu "rude" :D


---------------
Gamertag : Getget94 - PSN : Getget1980 - Nintendo Network : Getget1980 - Uplau : Getget1980
Reply

Marsh Posté le 17-02-2008 à 23:05:26    

'tain mais y a rien à faire à part rajouter un "i" en fin de mot et éventuellement changer un ou deux paramètres par-ci par-là... et la doc de PHP c'est pas "rude", si tu veux apprendre un langage aussi simple que PHP (surtout sans taper dans la partie POO), c'est le minimum que t'aies à faire.
La programmation de manière générale, ça ne s'improvise pas non plus, le faire en autodidacte est possible mais demande beaucoup d'engagement et de rigueur. Si t'es pas prêt à faire tout ça, alors c'est mal barré.
Je dis pas ça par élitisme ou quoi que ce soit de semblable, mais faut revenir à la réalité ; la prog c'est un métier, ça s'improvise pas, surtout dans le cas des pages web un peu "sensibles" et qu'on s'aventure dans le domaine de la sécurité [:spamafote]


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 18-02-2008 à 20:29:41    

Je pense être pas mal capable en procédural, mais mon code est loin d'être optimisé, je demandais juste un site donnant les méthodes à employer plutôt que d'autres that's all :)


---------------
Gamertag : Getget94 - PSN : Getget1980 - Nintendo Network : Getget1980 - Uplau : Getget1980
Reply

Marsh Posté le 19-02-2008 à 07:28:15    

Et bah t'as la réponse :D Après si t'as peur des i ou des requêtes préparées on peut rien pour toi :whistle:

Reply

Marsh Posté le 19-02-2008 à 09:48:46    

Non non, pas peur des i ni des requêtes préparées :)
 
Je vais me plonger un peu plus dans la doc php alors ;)


---------------
Gamertag : Getget94 - PSN : Getget1980 - Nintendo Network : Getget1980 - Uplau : Getget1980
Reply

Marsh Posté le 19-02-2008 à 23:37:51    

Visiblement, mon serveur utilisé pour les tests sous easyphp ne possède pas le module mysqli :D


---------------
Gamertag : Getget94 - PSN : Getget1980 - Nintendo Network : Getget1980 - Uplau : Getget1980
Reply

Marsh Posté le 20-02-2008 à 01:18:13    

alors tu commences par virer esayphp et mettre wamp qui est à jour


---------------

Reply

Marsh Posté le 20-02-2008 à 05:14:39    

Ou simplement aller activer l'extension mysqli dansl e php.ini, le début de la prise en main ;)

Reply

Marsh Posté le 20-02-2008 à 06:51:00    

Je vais peut être passer à Wamp pendant les vacances, j'en entend que du bien (ce qui n'est pas le cas de easyhp).

 

J'ai un peu peur pour le transfert des bases sql mais bon, y'a pas de raisons, j'ai tout sauvé avec l'utilitaire de mysql "Mysql administrator"


Message édité par getget le 20-02-2008 à 06:51:49

---------------
Gamertag : Getget94 - PSN : Getget1980 - Nintendo Network : Getget1980 - Uplau : Getget1980
Reply

Marsh Posté le 20-02-2008 à 10:04:07    

meme pas besoin , un simple copier coller de tes bases suffira , si tu veux pas te compliquer la vie

 

a noter quand meme qu'il risquqe d'y avori quelques incompatibilités lors de la montée de version de php et de mysql


Message édité par flo850 le 20-02-2008 à 10:04:46

---------------

Reply

Marsh Posté le 20-02-2008 à 10:06:27    

Très franchement, si tu veux mieux apprendre le fonctionnement d'Apache/PHP/MySQL, tente l'installation séparée des composants par toi-même. C'est simple et ça te permettra aussi de voir comment personnaliser ton serveur selon tes besoins.
Les packages prêts à l'emploi comme Easyphp ou Wamp sont certes pratiques à l'install mais ne comportent pas forcément les dernières mises à jour (parfois importantes pour la sécu) et leur configuration de base peut s'avérer trop lourde ou trop légère en fonction de tes besoins.


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 20-02-2008 à 14:05:38    

Surtout que tout existe en .msi maintenant ;)

Reply

Marsh Posté le 24-02-2008 à 12:18:11    

http://www.quiappeler.com/index.php?page=index.php  :lol:  
Corrige déjà cette faille. Elle permet de provoquer un 'déni de service'.

Reply

Marsh Posté le 24-02-2008 à 14:55:46    

:lol:

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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