Connexion - Version imprimable +- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org) +-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38) +--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51) +--- Sujet : Connexion (/showthread.php?tid=2067) Pages :
1
2
|
Connexion - Berz - 26-11-2007 Hello tous le monde, je suis encore un novice en ce qui conserne le php et mysql je voudrais savoir si ce script de connexion comporte des failles et comment l'améliorer bien sur !! Il y a une page avec un POST avant cela bien sur! Code PHP :
voilà j'espère que c'est clair ! merci !![/php] RE: Connexion - Berz - 26-11-2007 dans ce cas il faut laisser if (isset($donnees['pseudo'])) pour savoir si il a touver qqc ou pas ? RE: Connexion - Berz - 26-11-2007 Ben j'aurais pensé a envoye les variables pseudo et password avec un formulaire GET et vérifier à chaque page avec mysql_query("SELECT pseudo FROM nom_de_la_table WHERE pseudo='$pseudojou' and password = '$passalacon'"); mais je pense que c'est trop lourd . As-tu une autre solution ? RE: Connexion - Galaan - 26-11-2007 mysql_query("SELECT pseudo FROM nom_de_la_table WHERE pseudo='$pseudojou' and password = '$passalacon'"); Oula !!!! Ne jamais faire ca malheureux !!!! Le mieux pour etre sur d'eviter les failles est de faire mysql_query("SELECT id,pseudo,password FROM nom_de_la_table WHERE pseudo='$pseudojou'"); Et de boucler sur la liste pour savoir si le mot de passe existe. Sinon c'est une invitation au sql injection.(sauf si tu blindes cote php) RE: Connexion - Galaan - 26-11-2007 Ca passe avec la liste de tous les mots de passe que si tu ne verifies que le mot de passe. Si tu verifies le pseudo et le pass ca ne passe plus. Mais de toute facon, il est clair que tu as raison, securiser toutes ses variables de facon systematique est une excellente habitude a prendre. Ca evite les mauvaises surprises. RE: Connexion - Zamentur - 26-11-2007 Je dirais meme que la colone "pseudo" (ou de preference la colonne id qui y correspond) doit etre positionner en clef index/unique (avec auto increment pour l'id) De cette façon il n'y a pas besoin de mettre de while car la requete s'arreteras de chercher dès le premier resultat (pas besoin de LIMIT 1 à rajouter en théorie) Code PHP :
N'oublie pas de mettre ton URL de façon absolue (ou fait une fonction qui le fait pour toi) Si possible indente ton code, je sais que sur un forum c'est soulant, mais là tu as due faire un copier /coller donc l'indentation aurrais du apparaitre Code PHP :
Sinon pour md5 et les session je suis tout à fait d'accord! Et je suis d'accord avec oxman! La le script est vulnerable sur un formulaire qui est forcement accessible à tous! Ca veux dire que quiconque a assez de jujote pour trouver un nom de table de ton jeu peut le foutre en l'air en moins de 2 minutes... RE: Connexion - Berz - 27-11-2007 OK pour les variables sessions j'ai compris mais j'ai une question: comment on sécurise ses variables ! si vous avez un lien ca va aussi ! RE: Connexion - Sephi-Chan - 27-11-2007 RE: Connexion - Zamentur - 27-11-2007 Alors pour la securité, le premier pas c'est d'y penser effectivement! un lien qui me semble etre pas mal: http://phpsec.org/projects/guide/fr/1.html Sinon, reprenont ici le debut de ton script: Code PHP :
En effet ici tu perlet aux utilisateur d'inserer du html dans leur pseudo, et par consequent d'afficher ce qu'il leur semble bien sur ta page Un bon scripteur ayant étudié les code du jeu pourrait reussir à afficher par exemple de la publicité, ou alors un formulaire demandant une adresse mail aux autres joueurs(les joueurs pensant que c'est le jeu qui le demande) et ainsi spammer ces derniers Ca peut aussi les obliger à supprimer leur compte pour eviter çà il faut encoder les balise html de maniere à les afficher plutot qu'à les executer: http://de3.php.net/manual/fr/function.htmlspecialchars.php (par exemple avec htmlspecialchar()... Mais tu peux par exemple definir une fonction qui impose un pseudo d'une cerrtaine taille à l'enregistrement, qui impose que seul les lettres et les chiffres sont accepté... De maniere général ne pas faire confiance à ce qui vient de l'exterieur! Notament les données recuperer par POST,GET, COOKIES et l'entete HTTP (donc les superglobal utilisateur) Mais aussi les donnée lue sur le net (par exemple si le site lis une page d'un autre site (qu'on ne controle pas) pour en extraire des données celles ci(par exemple les script pour les tchats qui affiche vous avez tant de tchateur...) Donc en gros si la variable doit etre un nombre positif entier il faut verifier si c'est le cas, si ce doit etre une phrase sans HTML et SQL pareil Si la variable est censé venir d'un formulaire du jeu il est possible de verifier dans l'entet HTTP la provenance de la page (mais attention elle est falsifiable) , il est aussi possible de verifier que le formulaire a été généré pour cette personne juste avant... Pour eviter les bugs il faut se soucier des apostrophes dans les phrases qui seront enregistré dans sql De maniere general php demande d'utiliser http://de3.php.net/manual/fr/function.mysql-real-escape-string.php ce que peut font à cause du probleme de lisibilité que celà implique (c'est là que la creation d'une classe d'abstraction sql peut devenir utile) Sinon il y a des attaques très dure à contrer comme les attaques de type XRCF. Dans un premier temps il est preferable de passer par POST pour tout ce qui est execution d'action Dans un second temps , pour une protection beaucoup plus longue à transgresser il faut generer des nom de champs de formulaire aleatoire, de façon à verifier qu'elle provienne bien du bon formulaire. Et verifier le HTTP REFERER si le hacker l'aurais oublié Toutes les actions importante( comme le changement de mot de passe, la supression d'un compte) doivent demander le mot de passe (qui si il n'est pas connue stoppe ce type d'attaque) surtout si l'utilisateur s'est connecté auparavant! Aujourd'hui je pense pas etre dans le faux en disant que la plus part des sites sont très vulnerable à cette faille, et qu'il n'existe pas de solution 100% fiable(en dehors du mot de passe) contre cette derniere (avec la combinaison HTML/PHP). Juste des solutions qui sont très longue à contourner... EDIT: oops j'ai encore ecris un trucs un peu en decalage de ce qui as étais demandé ... RE: Connexion - Berz - 27-11-2007 |