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

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] Rah niveau sécurité jsuis plus trop certain

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

[PHP] Rah niveau sécurité jsuis plus trop certain

n°461107
burgergold
5$? va chez l'diable!
Posté le 18-07-2003 à 00:00:49  profilanswer
 

Je lis, par ci, par là, different truc au niveau de la sécurité avec php qui me fond réfléchir, par exemple:
 
les include c dangeureux
les formulaires post ca peut etre dangeureux
les parametres dans les url c dangeureux
 
mais alors comment on doit monter ses pages  :cry:


---------------
http://www.boincstats.com/signature/user_664861.gif
mood
Publicité
Posté le 18-07-2003 à 00:00:49  profilanswer
 

n°461110
*syl*
--> []
Posté le 18-07-2003 à 00:04:38  profilanswer
 
n°461112
burgergold
5$? va chez l'diable!
Posté le 18-07-2003 à 00:06:35  profilanswer
 


 
jen ai lu une bonne partie tout a l'heure
 
mais jdonne un exemple, jai un formulaire d'inscription, donc dois-je me dire que chaque champs est une menace et doit être validé?
 
faut devenir paranoïaque de tout?


---------------
http://www.boincstats.com/signature/user_664861.gif
n°461113
*syl*
--> []
Posté le 18-07-2003 à 00:07:57  profilanswer
 

Bah ça dépends c'que tu fais des paramètres après..

n°461118
burgergold
5$? va chez l'diable!
Posté le 18-07-2003 à 00:21:49  profilanswer
 

bin des exemples:
 
J'ai des formulaires pour des ajouts dans ma base de données, du genre ajout de user, ajout de menu, ajout de nouvelles, je passe tout les champs par post et ensuite jfais l'entré dans la bd
 
J'avais concu mon site d'une maniere à ce que j'aille un "template" dans lequel je ne faisais qu'inclure mon corps. J'avais donc un require_once d'un fichier php pour chacune des pages


---------------
http://www.boincstats.com/signature/user_664861.gif
n°461151
omega2
Posté le 18-07-2003 à 00:52:03  profilanswer
 

les includes :
dangeureux si t'as du code qui se promènes en dehors de toute classe et de toute fonction.
 
les formulaires :
dangeureux si quelque part tu réaffiches tel quel la saisie d'une zone assez grande pour contenir du code javascript ou tout autre code exécuté côté client.
 
les paramètres dans les URL :
dangeureux si une partie de ces paramètres est une valeur sensible et que la vérification corespondante a cette valeur est incomplète ou inexistante.
Par exemple, dans beaucoup de site, il y a une page principale et cette page inclus toutes les autres en fonction d'une variable passé dans l'URL. Si on vérifie pas cette valeur, ou plustôt si on vérifie pas que le visiteur a le droit de voir la page corespondant a cette valeur, il suffit qu'un visiteur modifie l'URL pour rentrer dans les sections a accés réservé tel que la page d'administration du site. ;)
 
Voilà pour le domaine de la sécurité, les conaisances de bases a conaitre a mon avi, pour la création de tout site web dynamique.


Message édité par omega2 le 18-07-2003 à 00:55:12
n°461155
burgergold
5$? va chez l'diable!
Posté le 18-07-2003 à 00:56:47  profilanswer
 

omega2 a écrit :

les includes :
dangeureux si t'as du code qui se promènes en dehors de toute classe et de toute fonction.donc avoir un include qui fait l'appel de fonction selon certaine variable post est dangeureux?
 
les formulaires :
dangeureux si quelque part tu réaffiches tel quel la saisie d'une zone assez grande pour contenir du code javascript ou tout autre code exécuté côté client.si ya des erreurs d'entrés par exemple, je réaffiche le formulaire avec les données, donc si jcomprends bien c dangeureux?
 
les paramètres dans les URL :
dangeureux si une partie de ces paramètres est une valeur sensible et que la vérification corespondante a cette valeur est incomplète ou inexistante.
Par exemple, dans beaucoup de site, il y a une page principale et cette page inclus toutes les autres en fonction d'une variable passé dans l'URL. Si on vérifie pas cette valeur, ou plustôt si on vérifie pas que le visiteur a le droit de voir la page corespondant a cette valeur, il suffit qu'un visiteur modifie l'URL pour rentrer dans les sections a accés réservé tel que la page d'administration du site. ;)ca je suis ok, on a un module qui vérifit l'accès des usagers selon le "corps" inclus


---------------
http://www.boincstats.com/signature/user_664861.gif
n°461166
omega2
Posté le 18-07-2003 à 01:25:34  profilanswer
 

burgergold a écrit :


donc avoir un include qui fait l'appel de fonction selon certaine variable post est dangeureux?

Oui, c'est dangeureux si certaines de ces variables sont testé dans la page principale et pas dans la page incluse. Ca veut dire qu'une personne mal intentioné peut sauter par dessus ces tests en appellant directement la page incluse.
D'un autre côté la page principale peut initialiser des variables utilisé par le code de la page incluse et si la valeur de la variable _POST["var"] est aussi donnée automatiquement a la variable $var alors il risque d'y avoir des problèmes vu qu'en appellant directement la page incluse on peut donner n'importe quelle valeur a n'importe quelle variable.
 

burgergold a écrit :

si ya des erreurs d'entrés par exemple, je réaffiche le formulaire avec les données, donc si jcomprends bien c dangeureux?

Dans ce cas là, c'est vrai que c'est un cas particulié dontt j'aurais du parlé, c'est pas vraiment dangeureux vu que la seule personne qui subirait le code saisie par une personne est elle même. Mais si le formulaire est bien remplis, tu vas surement enregistrer les valeurs quelque part et si tu les restitue a n'importe qui sans auccune modification, alros là, il y a un risque.
 

burgergold a écrit :

ca je suis ok, on a un module qui vérifit l'accès des usagers selon le "corps" inclus

Moi aussi, j'ai fait ça. :) Au moins il y a un truc pour lequel j'ai pas fait de bourdes. ;)
 
Bonn en fait, au lieu de parler de danger, j'aurais mieux fait de parler de dangger potentiel. ;)

n°461167
burgergold
5$? va chez l'diable!
Posté le 18-07-2003 à 01:31:41  profilanswer
 

bin en fait jveux vraiment voir les possibilités d'attaques possible.
 
Je suis avec un copain au départ d'un code d'un intranet + site web. Dans tout ca, va il y avoir de la gestion de serveur et c surtout pour ca que je veux sécuriser le plus possible.
 
Donc la jvois des possibilités d'attaques, mais j'ai plus ou moins de solutions
 
pour en revenir à mes includes... ils sont dans un dossier include/ avec un htaccess qui fait un deny all
 
dans ce cas, jcrois pas que personne ne puisse appeler ces pages d'un moyen externe, vrai? selon moi c'est sécuritaire, car les seules pages pouvant appeler ces script php sont les miennes
 
La seules page pouvant être appelé de l'externe est mon index.php, qui lui appele mes modules de menu et de corps


---------------
http://www.boincstats.com/signature/user_664861.gif
n°461186
Mara's dad
Yes I can !
Posté le 18-07-2003 à 03:01:47  profilanswer
 

Tu peux aussi mettre tes includes dans un répertoire en dehors de l'arborescence du site.
 
Par exemple pour apache :
Le site est sur /home/www, donc dans httpd.conf, tu as DocumentRoot=/home/www
 
Si les includes sont dans /var/www_includes par exemple, il seront inaccessibles pour un visiteur.
 
Pour protéger les paramètres en POST et GET, il faut impérativement que register_globals soit off dans php.ini ce qui est le cas par défaut à partir de php 4.2.0.
Il faut aussi "échaper" tous les caractères spéciaux du genre ' ou ". et changer les < et > en &lt; et &gt;
 
Ce sont des recomendations de bases, mais ont peux bien sûr aller plus loin.
 
Par exemple, dans un fomulaire qui propose un <select>, le code PHP devrais vérifier que la valeur reçue fait bien partie de celles qui ont été proposées.
 
C'est pas forcément une simple question de sécurité, çà sert aussi à limiter les bugs.
Pour que ce soit efficace, il faut mettre en place un système qui permette de faire automatiquement des vérifications de base sur les variables reçues. Les controle peuvent se baser sur une convention de nomage des variables.
 
Sur un site sur lequel je travaille, les formulaires sont décrit dans un formalisme XML. Ils contiennent les requêtes à exécuter, et chaque champs est typé. Ensuite un coup de XSLT permet de générer le HTML à envoyer au client. Tout ce qui permet de faire les vérifs est enregistré en session. Quand les données d'un formulaire sont reçues, une moulinette standard passe chaque variables en revue et fait des vérifications en fonction de son type : dates, nombre, choix de case à cocher ou de liste <select>, tout çà à partir des infos en sessions.
 
Pour éviter au maximum les riques d'injection SQL, aucune requête dépendante des données saisie n'est éffectué directement en PHP. Tout passe par des procédures stockées. Dans notre cas, c'est Oracle, mais çà pourait être SqlServer ou postGreSql.
La totalité des traitements de mise à jour des bases est réalisé par des procédures stokées. Les procédures et leurs paramètres sont tous référencés dans des tables, ce qui permet d'avoir un minimum de code spécifique en PHP. Tout est décrit. Notre formalise XML nous permet d'indiquer la ou les procédures à utiliser, dans quelle ordre, condition etc...
 
Bon c'est un peu lourd à mettre en place, mais le principe de base est toujours d'éviter les redondances de code, et surtout de ne pas faire confiance au Client !


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
mood
Publicité
Posté le 18-07-2003 à 03:01:47  profilanswer
 

n°461397
burgergold
5$? va chez l'diable!
Posté le 18-07-2003 à 11:55:36  profilanswer
 

et surtout de ne pas faire confiance au Client !
 
pendant 3 années d'études en informatique, on n'a pas cesser de me dire ca et j'ai fini par y croire
 
finalement, dans ma derniere session de cours, ils nous ont données un cours de communication pour diminuer l'influence que les prof ont eu sur ns vis à vis les client  :lol:


---------------
http://www.boincstats.com/signature/user_664861.gif
n°461399
burgergold
5$? va chez l'diable!
Posté le 18-07-2003 à 11:56:30  profilanswer
 

sinon en réalité, qu'est-ce que vous pensez que je dois faire pour sécuriser mon site? tout les truc mentionnés? ca va grossir mon code de 3 fois surement  :cry:


---------------
http://www.boincstats.com/signature/user_664861.gif
n°461443
THE REAL S​MILEY
The Real Résistance!
Posté le 18-07-2003 à 12:28:22  profilanswer
 

burgergold a écrit :

sinon en réalité, qu'est-ce que vous pensez que je dois faire pour sécuriser mon site? tout les truc mentionnés? ca va grossir mon code de 3 fois surement  :cry:  

sécurité n'exclut pas facilité :o


---------------
༼ つ ◕_◕ ༽つ
n°461475
omega2
Posté le 18-07-2003 à 13:06:06  profilanswer
 

burgergold a écrit :

sinon en réalité, qu'est-ce que vous pensez que je dois faire pour sécuriser mon site? tout les truc mentionnés? ca va grossir mon code de 3 fois surement  :cry:  

j'ai pas calculé combien de ligne de code corespond a la mise en place d'une sécurité, mais je suis quasiment certain que ca doit faire moins 1/30 éme de la totlité. ;)
 
Mara's dad > Je vois pas en quoi une reqquête stocké est moins dangeureuse qu'une requête écrite par du code php.
Si le code qui créé la requête est bien écrit et que personne ne s'amuses à la modifier alors ca reste aussi sécurisé.
Et si une requête doit être modifié, il y a autant de risque d'erreur humaine que ca soit une procédure stocké ou une requête clasique. ;)
Par contre, vote système de vérification des variables, elle a l'air vraiment costaud.
Dernière remarque : pour le register_global, beaucoup d'hébergeur gatuit le gardent a on alros il vaut mieux être courant de ce risque de problème de sécurité. ;)

n°461783
Mara's dad
Yes I can !
Posté le 18-07-2003 à 16:44:42  profilanswer
 

Une requête stockée, c'est comme du code compilé, alors qu'un requête écrite en PHP et ensuite transmise au serveur Oracle, ben c'est une requête dynamique que le serveur doit analyser avant de l'éxécuter. La version en procédure stocké est plus rapide que l'autre et plus sécurisée.
 
Par exemple pour une requête de vérification de user/MDP :
 
En php (sans vérifs particulière...):
 

Code :
  1. $sql = "select UserName from Users where login='{$_POST['login']}' and password='{$_POST['password']}'";
  2. $stmt = OCIParse( $Cnx, $sql );
  3. if( OCIExecute( $stmt ) )
  4. {
  5. if( OCIFetchStatement( $this->stmt, $result ) )
  6. {
  7.  echo( "Bonjour {$result['UserName']} !" );
  8. }
  9. else
  10. {
  11.  echo( "Erreur de login et/ou de mot de passe !" );
  12. }
  13. }


 
Quand on fait çà, y'a un risque en fonction du contenu de $_POST['login'] et / ou de $_POST['password']
 
Un utilisateur mal intentionné qui connais un login ( par exemple "omega2" ) peut essayer de mettre un truc du genre "x' or '1'='1" comme mot de passe.
 
La requête envoyée par PHP devient :
 
 
"select UserName from Users where login='omega2' and password='x' or '1'='1'"
 
Et on entre alors sans avoir à connaitre le mot de passe...
 
 
Avec une procédure stockée, c'est impossible de faire çà :
 
en PL/SQL :
 

Code :
  1. CREATE OR REPLACE FUNCTION authentification( p_usr in VARCHAR2, p_pass in varchar2, p_userName out varchar2) Return boolean
  2. AS
  3. retCode boolean;
  4. BEGIN
  5. SELECT
  6.  USERNAME into p_userName
  7. FROM
  8.  ohabilutilisateur
  9. WHERE
  10.  identifiant=p_usr
  11.  AND motdepasse=p_pass;
  12. retcode := true;
  13. EXCEPTION
  14. WHEN OTHERS THEN
  15. retcode := false;
  16. END authentification;


 
Dans ce cas, lors de l'appel à la fonction Oracle "authentification" en PHP, il sera impossible de changer la requête.
Quelle que soit la valeur passée à la fonction dans p_pass, l'intégralité du contenu de p_pass est considéré comme une chaîne unique.
Dans "AND motdepasse=p_pass" c'est le contenu du champs motdepasse qui est comparé au contenu de la variable p_pass.
Dans la version PHP, le danger vient du mélange entre code et donnée. C'est le principal problème avec les requêtes dynamiques.
 
Je ne dis pas qu'il est impossible de sécuriser des requêtes dynamiques, je dis que c'est plus simple avec des procédures stockées. En cas de modification de la requête, la sécurité est a revoir en PHP, ce qui n'est pas une charge négligeable.
 
Pour le register_globals, les règles pour se protéger sont simples:
 
- Initialiser toutes les variables avant utilisation. Un bonne habitude, c'est de faire comme si les variables devait-être déclarée. Donc en début de fonction, on "déclare les variables en les initialisant". Il faut donc éviter au max le recours à des variables "Globales" dans les fonctions...
 
- Ne pas utiliser une variable de $_POST ou $_GET sans un minimum de vérification de type, et contenu. Par exemple, pour un mot de passe, on peux décider des caractères autorisés. Cà permet d'éviter les problèmes d'injection SQL...
 
Remarque :
ne pas faire confiance au Client doit s'entendre dans une relation client/serveur. Le serveur WEB ne doit pas faire confiance au client Browser. Par exemple, c'est pas parce-que votre page est censée vérifier en Javascript qu'un Mot de passe ne doit contenir que des lettres et des chiffres qu'il faut croire, coté PHP, que les vérifications ont été faites !
 
Les vérifs Javascripts ne servent pas à la sécurité, mais à l'ergonomie.
 
Quand à savoir si un prestataire de service doit faire confiance au client, ben c'est une autre histoire :D


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°461824
Tetedeienc​h
Head Of God
Posté le 18-07-2003 à 17:15:13  profilanswer
 

Mara's dad, j'avais JAMAIS pensé a un truc pareil. Merde tiens.
 
A part la procedure stockée, comment tu veux te protéger de ca ?
 
Entre autres, pourquoi un "include" est danereux ?
 
Mes include  a moi sont dans un rep protégé par htaccess...


Message édité par Tetedeiench le 18-07-2003 à 17:17:08
n°461831
Tetedeienc​h
Head Of God
Posté le 18-07-2003 à 17:20:40  profilanswer
 

D'ailleurs, en y réflléchissant bien, ton truc, mara's dad, ne marche que si le pass est en clair dans la BDD.
 
Prends un exemple du gars  qui hashe son pass en MD5.
 
Avant de faire sa  requete, il va  appeler MD5($pass)...
 
Et la comment tu veux passer outre ? :D Même avec des  ' et autres " c'est DSC...


Message édité par Tetedeiench le 18-07-2003 à 17:20:55
n°461840
Mara's dad
Yes I can !
Posté le 18-07-2003 à 17:25:24  profilanswer
 

tetedeiench a écrit :

Mara's dad, j'avais JAMAIS pensé a un truc pareil. Merde tiens.
 
A part la procedure stockée, comment tu veux te protéger de ca ?
 
Entre autres, pourquoi un "include" est danereux ?
 
Mes include  a moi sont dans un rep protégé par htaccess...


 
Si un include ne contient que des fonctions ou des déclarations de variables, y'a pas de danger à la condition de les nomer avec une extention traité par PHP.
Certains on pris l'habitude de nomer les includes en .inc, et là le problème c'est que si les fichiers ne sont pas protégés par un htaccess, ben le code php est envoyé au navigateur. Ce qui peut être  facheux pour un include qui contient un mot de passe d'accès à un BD.
 
La protection par htaccess, c'est très bien aussi, mais un poil plus compliqué à gérer.
 
Tu commence à comprendre pourquoi c'est risqué de réinventer des systèmes de sécurité au lieu d'utiliser ceux qui font leurs preuves tous les jours ? :whistle:


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°461841
dropsy
et bonne chance surtout...
Posté le 18-07-2003 à 17:25:47  profilanswer
 

tetedeiench a écrit :

D'ailleurs, en y réflléchissant bien, ton truc, mara's dad, ne marche que si le pass est en clair dans la BDD.
 
Prends un exemple du gars  qui hashe son pass en MD5.
 
Avant de faire sa  requete, il va  appeler MD5($pass)...
 
Et la comment tu veux passer outre ? :D Même avec des  ' et autres " c'est DSC...


oui, mais c'est aussi applicable pour les delete ;)
ex: delete from table where id='aaa'
si tu récupères l'id par lurl (genre delete.php?id=aaa), le client peut mettre "aaa' or 1" dans ton url ;)

n°461848
Tetedeienc​h
Head Of God
Posté le 18-07-2003 à 17:30:42  profilanswer
 

Mara's dad a écrit :


 
Si un include ne contient que des fonctions ou des déclarations de variables, y'a pas de danger à la condition de les nomer avec une extention traité par PHP.
Certains on pris l'habitude de nomer les includes en .inc, et là le problème c'est que si les fichiers ne sont pas protégés par un htaccess, ben le code php est envoyé au navigateur. Ce qui peut être  facheux pour un include qui contient un mot de passe d'accès à un BD.
 
La protection par htaccess, c'est très bien aussi, mais un poil plus compliqué à gérer.
 
Tu commence à comprendre pourquoi c'est risqué de réinventer des systèmes de sécurité au lieu d'utiliser ceux qui font leurs preuves tous les jours ? :whistle:  


 
Je nomme tjs mes include en *.php, et ils sont dans un réppertoire protégé par htaccess...
 
je vois pas trop la difficulté à gérer du truc m'enfin ;)
 
Pour le delete, oui, j'y avais pas pensé... aiou.
 
mais la comment tu veux te protéger de ca ? :D
 
perso, j'utilise tjs  des  variables de  session, et pour avoir acces a des données X  l'user  doit etre loggé, donc encore une fois la je vois pas comment il peut faire ...
 
PS : le pire truc  de secu que j'ai vu c'était un truc (pas  de moi) 'display.php?file=fichieralacon.txt'  
 
Trop facile le  display.php?file=../../etc/passwd' :D

n°461853
dropsy
et bonne chance surtout...
Posté le 18-07-2003 à 17:39:22  profilanswer
 

tetedeiench a écrit :


Pour le delete, oui, j'y avais pas pensé... aiou.
 
mais la comment tu veux te protéger de ca ? :D


 
dans mon exemple, j'ai mis une chaine de caractère, mais, en général, mes id sont des int, donc je teste que la variable que je récupère osit bien un int.
si c'est une chaine, tu peux interdire la présence d'espace et donc tester que que l'id que tu va suppr ne contienne pas d'espace

n°461854
omega2
Posté le 18-07-2003 à 17:39:41  profilanswer
 

Mara's dad > Dans une requête sql fabriqué en php, je ne prends jamais directement les données saisie par l'utilisateurs.
Je fais toujours un add_slashes ne seraisse qu'a cause de la possibilité de la saisie d'un nombre imper de " ce qui fait planté la requête. ;)
Du coup, je n'ai pas ce problème là de sécurité.
 
Mais c'est sur qu'au niveau de la rapidité, les requête stockée  sont considérés comme plus rapide. Moi, je l'ai aient jamais utilisés dans mon site tout simplement par ce que je ne sais pas si mon hébergeur les autorises.
En plus, je compte mettre dans quelques mois une partie de mon site en open source alors mêm si en changeant d'habergeur je peux les utilisés je préfaires les éviter du moins pour cette partie là. ;)

n°461860
omega2
Posté le 18-07-2003 à 17:43:31  profilanswer
 

dropsy a écrit :


 
dans mon exemple, j'ai mis une chaine de caractère, mais, en général, mes id sont des int, donc je teste que la variable que je récupère osit bien un int.
si c'est une chaine, tu peux interdire la présence d'espace et donc tester que que l'id que tu va suppr ne contienne pas d'espace

Et il faut pas oublié également de vérifié que le visiteur a le droit de suprimé cet enregistrement là. ;)

n°461863
Mara's dad
Yes I can !
Posté le 18-07-2003 à 17:48:30  profilanswer
 

tetedeiench a écrit :

D'ailleurs, en y réflléchissant bien, ton truc, mara's dad, ne marche que si le pass est en clair dans la BDD.
 
Prends un exemple du gars  qui hashe son pass en MD5.
 
Avant de faire sa  requete, il va  appeler MD5($pass)...
 
Et la comment tu veux passer outre ? :D Même avec des  ' et autres " c'est DSC...


 
Encore une fois, je ne dis pas qu'il est impossible de faire attention ! (T'as lu çà http://www.nexen.net/interview/index.php?id=30 cité plus haut ? )
 
Le coup du MD5($pass) est une méthode, mais est-ce suffisant dans tous les cas ? Non, çà l'est peut-être pour la requête de vérification du LOGIN/MDP, mais y'a plein d'autres requêtes dans une appli...
On peut aussi jouer avec le login :
 
Par exemple, l'utilisateur envoie çà :
 
$_POST['login'] = "omega2'; drop table posts; select count(*) as toto from UserName where '1'='1";
$_POST['password'] = "motdepassebidon";
 
Tu fais un gentil $MDP=md5($_POST['password']);
 
Et tu exécute la requête qui devient :
 
"select UserName from Users where login='omega2'; drop table posts; select count(*) as toto from UserName where '1'='1' and password='CHARABIA_EN_MD5'"
 
Et qu'est-ce qui se passe à ton avis ?
 
Essaye avec phpMyAdmin tu va voir, c'est rigolo !
 


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°461873
Tetedeienc​h
Head Of God
Posté le 18-07-2003 à 18:02:40  profilanswer
 

Mara's dad a écrit :


 
Encore une fois, je ne dis pas qu'il est impossible de faire attention ! (T'as lu çà http://www.nexen.net/interview/index.php?id=30 cité plus haut ? )
 
Le coup du MD5($pass) est une méthode, mais est-ce suffisant dans tous les cas ? Non, çà l'est peut-être pour la requête de vérification du LOGIN/MDP, mais y'a plein d'autres requêtes dans une appli...
On peut aussi jouer avec le login :
 
Par exemple, l'utilisateur envoie çà :
 
$_POST['login'] = "omega2'; drop table posts; select count(*) as toto from UserName where '1'='1";
$_POST['password'] = "motdepassebidon";
 
Tu fais un gentil $MDP=md5($_POST['password']);
 
Et tu exécute la requête qui devient :
 
"select UserName from Users where login='omega2'; drop table posts; select count(*) as toto from UserName where '1'='1' and password='CHARABIA_EN_MD5'"
 
Et qu'est-ce qui se passe à ton avis ?
 
Essaye avec phpMyAdmin tu va voir, c'est rigolo !
 
 


 
:lol:
 


Message édité par Tetedeiench le 18-07-2003 à 18:06:47
n°461914
burgergold
5$? va chez l'diable!
Posté le 18-07-2003 à 18:36:48  profilanswer
 

putin c trop fou  :lol:  
 
sinon pour les procédures stockés, jdéveloppe avec easyphp et mysql pour le moment, comment jpeux faire ca?

n°461918
farib
Posté le 18-07-2003 à 18:42:23  profilanswer
 

et pourqoi ca donnerait pas plutot
 
 
"select UserName from Users where login='omega2' and password='x or 1=1' "
 
 :heink:  ?


Message édité par farib le 18-07-2003 à 18:42:58
n°461919
Mara's dad
Yes I can !
Posté le 18-07-2003 à 18:45:35  profilanswer
 

burgergold a écrit :

putin c trop fou  :lol:  
 
sinon pour les procédures stockés, jdéveloppe avec easyphp et mysql pour le moment, comment jpeux faire ca?


 
Heu, ben c'est le problème avec mysql, y'a pas les procédures stockées...
 
T'es obligé de faire SUPER gaffe à tes requêtes.
 


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°461920
Mara's dad
Yes I can !
Posté le 18-07-2003 à 18:47:12  profilanswer
 

farib a écrit :

et pourqoi ca donnerait pas plutot
 
 
"select UserName from Users where login='omega2' and password='x or 1=1' "
 
 :heink:  ?


 
Parce-que je met des ' dans le mot de passe. Pour que çà ne pose pas de problème il suffit de le échapper. Faut juste penser à le faire...


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°461923
Tetedeienc​h
Head Of God
Posté le 18-07-2003 à 18:59:02  profilanswer
 

Mara's dad a écrit :


 
Heu, ben c'est le problème avec mysql, y'a pas les procédures stockées...
 
T'es obligé de faire SUPER gaffe à tes requêtes.
 
 


 
ca c'est bien ce que je reproche a MySQL : pas de procédures stockées, pas de PL/SQL, pas de triggers :/

n°461928
drasche
Posté le 18-07-2003 à 19:05:39  profilanswer
 

burgergold a écrit :

sinon pour les procédures stockés, jdéveloppe avec easyphp et mysql pour le moment, comment jpeux faire ca?


attendre MySQL 5  
 
*soupir*


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°461935
Mara's dad
Yes I can !
Posté le 18-07-2003 à 19:36:16  profilanswer
 

tetedeiench a écrit :


 
ca c'est bien ce que je reproche a MySQL : pas de procédures stockées, pas de PL/SQL, pas de triggers :/


 
Y'a PostgreSql !


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°461938
Tetedeienc​h
Head Of God
Posté le 18-07-2003 à 19:50:28  profilanswer
 

Mara's dad a écrit :


 
Y'a PostgreSql !


 
ben je l'ai déjà  dit a mmon hébergeur mais bon :/

n°462031
burgergold
5$? va chez l'diable!
Posté le 18-07-2003 à 20:18:07  profilanswer
 

et passer les variables dans des fonctions comme mysql_real_escape_string(), mysql_escape_string()
 
c une solution?


---------------
http://www.boincstats.com/signature/user_664861.gif
n°462045
drasche
Posté le 18-07-2003 à 20:37:08  profilanswer
 

je viens de faire un truc en local (marchera sans doute pas chez les hébergeurs et c'est dommage :o), c'est carrément interdire l'accès aux fichiers .inc (mes includes sont en .inc). Directement dans httpd.conf.
 
Sinon pour les pages, je fais toujours une vérification exhaustive des paramètres en entrée, paranoia inside [:boidleau]


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°462048
burgergold
5$? va chez l'diable!
Posté le 18-07-2003 à 20:40:13  profilanswer
 

bin le faire dans httpd.conf ou placer un .htaccess deny all *.inc dans le dossier des .inc ca revient pas mal au meme


---------------
http://www.boincstats.com/signature/user_664861.gif
n°462051
drasche
Posté le 18-07-2003 à 20:42:58  profilanswer
 

ben au niveau rapidité en tout cas le httpd.conf est mieux :/
 
et puis j'ai pas encore compris comment activer les .htaccess [:tinostar]


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°462052
burgergold
5$? va chez l'diable!
Posté le 18-07-2003 à 20:45:00  profilanswer
 

Code :
  1. <Files *.inc>
  2. order allow,deny
  3. deny from All
  4. </Files>


 
ca c mon .htaccess qui se trouve dans mon dossier www/include/


---------------
http://www.boincstats.com/signature/user_664861.gif
n°462056
drasche
Posté le 18-07-2003 à 20:55:58  profilanswer
 

j'ai quasi la config par défaut d'Apache et il ne semble pas prendre en compte mon .htaccess :??:


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°462057
burgergold
5$? va chez l'diable!
Posté le 18-07-2003 à 21:02:00  profilanswer
 

avec easy php 1.6 ca marche #1...


---------------
http://www.boincstats.com/signature/user_664861.gif
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

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

  [PHP] Rah niveau sécurité jsuis plus trop certain

 

Sujets relatifs
affichage des infos d'une table postgresql en passant par PHP[HTML/JS/PHP] un bouton 'Set As Wallpaper'
[PHP] Transformer une chaine contenant de l'hexa en hexa...[PHP] LOAD DATA > ça marche sous Phpmyadmin mais pas ... (resolu)
[ASP=>PHP] transcrire ce code de l asp en php[PHP] import d'un fichier texte: les caractères spéciaux (resolu)
[ Php ] problème sur parsage de mailPeut on definir en constante des tableaux en PHP ?
[PHP] Moyenne d'une série de notes[PHP]Stats sur une page :)
Plus de sujets relatifs à : [PHP] Rah niveau sécurité jsuis plus trop certain


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