Avis sur mon code - Sécurité. - PHP - Programmation
Marsh Posté le 23-03-2005 à 07:49:04
deja , pas include mais require_once
enuiste c'est mieux mysql_real_escape_string que addslashes
c pas énorme mais bon jsuis loin detre fort en sécurité ^^
Marsh Posté le 23-03-2005 à 08:19:07
Bordel.. Soit c'est moi soit ce script est vraiment mal construit
l 9+10 : Verifie l'existance des variables avant de les supprimer
l 12 : c'est pas pask $_POST existe que $_POST['login'] existe lui aussi
l 15 : tu securise pas le login
l 16+17+18 : On ne gere pas comme ca les erreur mysql (a moins que t'ai redefini la fonction de gestion des erreurs, mais ici rien ne porte a le penser)
l 42 : Tu l'a defini ou ce $from_page ?
l 43 : C'est une faille vieille comme le monde ca
l 53 : post doit etre en minuscules
l 54+55+56 : input doit etre fermé
l 59 : Fait le avec des simple quote, et remplace le \n par chr(10)
A premiere vu j'ai vu "que" ca, apres je garantis pas d'avoir tout reperé, en tout cas si le reste du code est comme ca, je plains celui qui va devoir maintenir la secu du site
Marsh Posté le 23-03-2005 à 09:04:21
Après une lecture rapide :
- Il manque un test de l'IP
- $data peut être vide donc il faut le tester,
- pas de mysql_error, cela devoilerait tes requêtes en cas d'erreur,
- dans tes requetes pourquoi ne pas ajouter une condition sur le password ?
Marsh Posté le 23-03-2005 à 09:06:16
soju a écrit : Après une lecture rapide : |
Pas d'accord, le IP n'est pas un critere fiable
Marsh Posté le 23-03-2005 à 09:12:55
esox_ch a écrit : Pas d'accord, le IP n'est pas un critere fiable |
pas fiable mais le spoofing n'est pas si frequent que ça. ca reste un test de securite en plus, même si on peut passer au travers je ne vois pas pourquoi s'en priver. si on suit ton idée, les sessions sont encore moins fiables donc pourquoi les utiliser ?
Marsh Posté le 23-03-2005 à 09:20:28
En l'occurence je pensais plutot aux problemes que tu peux avoir si le visiteur n'a pas d'IP ou s'il se connecte avec la meme IP que 10 autres personnes ... Tu risques d'etre vite emebeter.
Les session, y a plein de moyens de les rendre plus sures
Marsh Posté le 23-03-2005 à 09:26:49
esox_ch a écrit : En l'occurence je pensais plutot aux problemes que tu peux avoir si le visiteur n'a pas d'IP ou s'il se connecte avec la meme IP que 10 autres personnes ... Tu risques d'etre vite emebeter. |
cela ne pose pas de problème si 10 personnes ont la même ip, c'est justement le principe des sessions. il faut tester l'ip pour éviter le vol de session, c'est different, et c'est un minimum que tu retrouveras dans toutes les grosses applis php.
esox_ch a écrit : Les session, y a plein de moyens de les rendre plus sures |
on attend tes propositions
Marsh Posté le 23-03-2005 à 09:30:41
http://ch2.php.net/manual/fr/ref.session.php
Lien Session Fixation entre autres
Pour le IP je vois pas ce que tu pourra en tirer si t'as 10 personnes sans IP qui arrivent sur ton site ..
Marsh Posté le 23-03-2005 à 09:50:33
esox_ch a écrit : http://ch2.php.net/manual/fr/ref.session.php |
arf, déjà lu, c'est toi qui l'a ecrit ?
esox_ch a écrit : Pour le IP je vois pas ce que tu pourra en tirer si t'as 10 personnes sans IP qui arrivent sur ton site .. |
je vois pas le problème, relis mon message precedent.
Marsh Posté le 23-03-2005 à 09:57:00
Non malheuresuement c'est pas moi qui l'ai ecrit, j'ai pas un assez haut niveau je pense
Admettons que t'a 10 personnes sans IP, la differentiation entre ces 10 personnes ne peut pas etre basée sur l'IP non? Donc qu'est-ce qui va t'empecher le vol de session? Maintenant admettons 1 personne, se connectant par un reseau avec plusieurs IP visibles depuis l'exterieur et basculant de l'une a l'autre durant le temps ... ton systeme le verra comme 2 utilisateurs differents non?
Marsh Posté le 23-03-2005 à 10:03:32
Salut
Voici ma proposition :
Code :
|
La provenance de from_page est obscure donc j'ai laissé comme ça
Marsh Posté le 23-03-2005 à 10:05:03
esox_ch a écrit : Admettons que t'a 10 personnes sans IP, la differentiation entre ces 10 personnes ne peut pas etre basée sur l'IP non? Donc qu'est-ce qui va t'empecher le vol de session? Maintenant admettons 1 personne, se connectant par un reseau avec plusieurs IP visibles depuis l'exterieur et basculant de l'une a l'autre durant le temps ... ton systeme le verra comme 2 utilisateurs differents non? |
les 10 personnes auront des id de session differents, on ne differencie pas par ip, on se sert juste de l'ip pour vérifier qu'il n'y a pas vol de session.
Mais comme tu dis cela pose problème en cas de changement frequent d'ip (exemple : AOL, une nouvelle ip pour chaque page)
Marsh Posté le 23-03-2005 à 10:05:22
esox_ch a écrit : |
Peux-tu préciser ces 2 points ?
Marsh Posté le 23-03-2005 à 10:18:15
15: un caractere d'escape et on fait sauter tes guillements et apparaitre ton code PHP . voir inclure son propre code
43: tu ne controles pas le nom de la page, resultat, on peut se renvoyer sur ce que l'on veut
Marsh Posté le 23-03-2005 à 10:30:19
fnemo a écrit : 15: un caractere d'escape et on fait sauter tes guillements et apparaitre ton code PHP . voir inclure son propre code |
+1
Marsh Posté le 23-03-2005 à 10:38:08
fnemo a écrit : 15: un caractere d'escape et on fait sauter tes guillements et apparaitre ton code PHP . voir inclure son propre code |
15 : je vois vraiment pas comment le fait de stocker le pseudo peut faire ça (de quels guillemets parles-tu ?)
43 : et alors ? ça touche que l'utilisateur qui a traffiqué le nom de la page. C'est pas du tout un problème de sécurité en tout cas
Marsh Posté le 23-03-2005 à 10:42:16
15: un pseudo en :
Code :
|
Et a chaque fois que tu afficheras son pseudo tu aura :
Code :
|
si l'on suppose que haha est le contenu de $onsenfoutcpourlademo
(et encore, c gentil ca)
pour le 43, s'il accede a une page de ton panel d'admin par exemple qui est mal proteger ... il pourra faire de tout et n'importe quoi;
Marsh Posté le 23-03-2005 à 10:43:46
Salut Soju
Je fais un test IP également pour le "vol de session",
je faisais le referer également avant mais
j'ai bien compris qu'on peu pas, cause: Noos par exemple...
soju a écrit : |
AOL en RTC ???
Marsh Posté le 23-03-2005 à 10:58:34
fnemo a écrit : 15: un pseudo en :
|
T'as testé ? On fait pas un eval pour afficher une variable il me semble Aucun risque au niveau du pseudo donc (un risque éventuel c'est une faille XSS lors de l'affichage HTML par exemple, mais pour ça on utilise htmlspecialchars() ou htmlentities())
Quant à la redirection, tu l'as dit toi même : "une page qui est mal protégée". Donc pas de problème de sécurité à ce niveau là
Marsh Posté le 23-03-2005 à 11:02:17
euh $from_page est initialise comment ?
ils sont ou les htmlentities et htmlspecialchars dans le code ?
c'est de ca que je parle ratibus
Marsh Posté le 23-03-2005 à 11:12:51
ratibus a écrit : T'as testé ? On fait pas un eval pour afficher une variable il me semble Aucun risque au niveau du pseudo donc (un risque éventuel c'est une faille XSS lors de l'affichage HTML par exemple, mais pour ça on utilise htmlspecialchars() ou htmlentities()) |
On n'est jamais a l'abbri d'une faille de secu, alors autant ne pas en laisser intentionnellement... Toi le 1er...
Marsh Posté le 23-03-2005 à 11:19:12
esox_ch a écrit : On n'est jamais a l'abbri d'une faille de secu, alors autant ne pas en laisser intentionnellement... Toi le 1er... |
Sauf que c'est pas une faille
Le header('Location: url') c'est juste une redirection. Si l'attaquant connait l'adresse il peut tout aussi bien la taper dans son navigateur
Marsh Posté le 23-03-2005 à 11:23:54
oui et non
image un script d'admin qui se resume a
Code :
|
(script bidon)
bref, un "location: control.php" et voila tu outre-passes l'identification
Marsh Posté le 23-03-2005 à 11:40:02
rompi a écrit : AOL en RTC ??? |
Hello rompi ^^
Je ne sais pas pour AOL (je ne m'abonnerais jamais chez eux) j'avais lu ça sur pas mal de sites.
Marsh Posté le 23-03-2005 à 11:56:30
ratibus a écrit : Sauf que c'est pas une faille |
Le probleme ce pose quand la personne essaie de t'inclure des fichiers sensibles .... Genre les .htacces, le fichier password de linux ,...
Marsh Posté le 23-03-2005 à 12:00:24
fnemo a écrit : oui et non
|
Dans ce cas c'est un problème de conception. Ou alors c'est pas normal que le script control.php soit accessible par HTTP
esox_ch a écrit : Le probleme ce pose quand la personne essaie de t'inclure des fichiers sensibles .... Genre les .htacces, le fichier password de linux ,... |
Attention là on parle pas de la faille classique du include($var) avec $var qui n'est pas vérifié. On parle du header('Location: url')
Marsh Posté le 23-03-2005 à 12:14:39
c'est dans l'arbo ? donc c'est accessible . a moins que tu es foutu un .htaccess ... et encore . enfin apres faut voir le contenu, mais comme dit, c un exemple, faillible .
Marsh Posté le 23-03-2005 à 12:41:40
Si tu es convaincu que tout soit securizé laisse comme ca ... moi je le ferais pas ... mais le net est un endroit libre...
Marsh Posté le 23-03-2005 à 12:47:01
fnemo a écrit : c'est dans l'arbo ? donc c'est accessible . a moins que tu es foutu un .htaccess ... enfin apres faut voir le contenu, mais comme dit, c un exemple, faillible . |
L'exemple que tu as donné est un mauvais exemple dans le sens où il y a, je pense, un problème de conception.
Pour tous les scripts accessibles par HTTP et qui doivent faire de la vérification de session par exemple, il ne faut pas que cette vérification puisse sauter
De manière générale, les librairies que l'ont inclus n'exécute pas de code lors de l'inclusion. Elles proposent des fonctionnalités (fonctions, méthodes de classe) qui doivent ensuite être appelées par le script qui en a besoin. De plus tes librairies (ou classes) gagnent en "ré-utilisabilité"
Marsh Posté le 23-03-2005 à 12:47:32
esox_ch a écrit : Si tu es convaincu que tout soit securizé laisse comme ca ... moi je le ferais pas ... mais le net est un endroit libre... |
J'en suis convaincu
Marsh Posté le 23-03-2005 à 13:52:32
esox_ch a écrit : Bordel.. Soit c'est moi soit ce script est vraiment mal construit |
C'est pas trés simpa ca comme remarque mais bon... Enfin voilà je vous avais bien dis que mes connaissances leur limites, je ne peux pas dire que j'ai des grande connaissance alors avant de faire quoi que ce soit pour ce projet, j'étudie le coté sécurité qui me semble être un point important.
En tout cas je vous remercie pour toute vos remarques et conseils dont je vais bien entendu me servir.
En passant $from_page c'était juste comme ca, je ne sais pas bien encore ce que je vais mettre a cette endroit du code pour rediriger vers la bonne page, puisque ce n'est que le premier script de ce projet que je fais. Ca me semble primordiale.
Marsh Posté le 23-03-2005 à 14:27:29
soju a écrit : Hello rompi ^^ |
Moi j'ai AOL ADSL a la maison ( c'est ma copine ), et
chez ses parents c'est AOL en RTC...
comme j'y vais ce WE je vérifierai...
Marsh Posté le 23-03-2005 à 15:54:51
dwogsi a écrit : C'est pas trés simpa ca comme remarque mais bon... Enfin voilà je vous avais bien dis que mes connaissances leur limites, je ne peux pas dire que j'ai des grande connaissance alors avant de faire quoi que ce soit pour ce projet, j'étudie le coté sécurité qui me semble être un point important. |
Je voulais pas du tout etre mechant, mais quand j'ai lu ton topic ca m'avais l'air d'etre qqch de serieux, et un script comme ça me montre seulement que tu n'es de loin pas pret pour faire un script commercial securisant ..
Marsh Posté le 23-03-2005 à 16:34:03
Oula, je n'ai jamais di que j'allais me lancer dans un site commercial, loin de moi cette idée, car je sais bien que mes capacité concernant le php sont bien loin d'être suffisantes.
Cependant j'ai une idée (et je n'ai certainement pas envie de la divulguer puisque je suis convaincu que le potentiel est important) mais j'ai besoin de sécurité puisque ca risquerait de générer du trafic.
Donc voilà je fais des test, et comme je n'ai pas les moyens de me payer le développement ou le design bah je fais comme je peux mais je ne suis pas non plus pressé alors je vais attendre de progresser en php avec ce que j'apprend en cours et petit à petit j'espère bien arriver à quelque chose.
Marsh Posté le 23-03-2005 à 16:56:40
Dans ce cas je ne peux que te souhaiter bonne chance et tout de bon pour ton projet
Marsh Posté le 23-03-2005 à 18:57:59
Merci !
(Tu nous viendrais pas de la suisse par hasard?)
Hummm en passant je me permet de poser une question et peut être a t elle déjà été posée donc j'espère qu'on ne va pas me blâmer: A qui doit on s'adresse pour demander le développement de script?
J'ai bien cherché des adresses mais tout ce que je trouve ce sont des société à l'étranger.... Et ca ne m'inspire pas tellement. Ou peut être que je ne sais pas chercher? Allez savoir...
Mais il faut vraiment que je parvienne a quelque chose! J'ai fait une rapide étude du potentiel de ce projet, et bien la concurence n'est pas a redouter puisqu'elle est mince (et j'ai le petit plus qu'il faut) et aprés avoir sondé la population de ma région, sur 223 personnes, 154 seraient intéressés par un tel service sur le net.
Je me demandais autre choses aussi: Quelles sont concrétement les risques avec un tel code?
Marsh Posté le 23-03-2005 à 19:32:36
Si, je suis suisse justement (le _ch de mon nom devrait me traihir )
Bein ecoute faut voir ce que tu demandes et combien tu peux payer, en theorie c'est dans emploi et etudes mais vu que tu as deja lancé la proposition ici ... P-e pa besoin de faire un 2ème topic tout de suite ...
Faut te dire que le net est un endroit a l'image de celui en vrai (Plein de gens gentils par devant mais cherchant a te braquer par derriere) donc il faut eviter de leur laisser l'occasion de te hacker, dit toi que si tu vois une faille, tu seras surment pas le seul, et donc comble la... Il y en aura toujours assez que tu verras pas et que d'autres verront
Marsh Posté le 23-03-2005 à 20:57:00
(en fait c'est pas le _ch qui m'a fais pensé à la suisse, c'est l'expression "tout de bon" (je ne l'ai entendu qu'en suisse, par la suite j'ai compris le _ch), et oui j'habite a 20 min de geneve, en France)
Oui je pensais pas recréer un topic de suite étant donné la présence de celui ci.
Et ce dont j'aurais essentiellement besoin ca serait une fonction disons de login. En fait une page de login et une fonction qui permette de tester dans les autres pages du site si l'utilisateur est loggé, le cas echéant le rediriger vers la page de login. Le tout avec différent niveaux d'utilisateurs disposant chacun de différents droit d'accès aux pages.
Pour ce qui est de combien je suis pret à mettre, je n'en ai encore aucune idée! Tout dépend de ce qu'on me propose et je n'ai aucune idée de combien ca pourrait me couter, et je ne sais pas non plus de combien je pourrais eventuellement disposer, tout dépend de l'évolution de mon salaire (des fois que ca augmente? ) et des frais que j'ai actuellement.
Et je sais bien que le net n'est nullement le paradis qu'il devrait, selon moi, être. Donc je cherche une entreprise sérieuse, en france ou en suisse, ou eventuellement quelqu'un qui voudrait le faire mais là je veux le code source avant de payer quoi que ce soit! Histoire de le faire contrôler par des gens qui ont de bonnes connaissances.
Je m'en suis déjà bien sortie pour le design avec de nombreuses négociations alors je voudrais pas bloquer sur le développement ca serait bien domage!
Marsh Posté le 23-03-2005 à 21:10:33
lol en effet,j'habite a 30 min de geneve ... mais du coté des helvetes . Ce que tu demandes est assez "basique" mais il faut que ce soit bien fait ...
3 cas de figure :
- Tu le fais toi meme , ce qui serait un tres bon entrainement mais qui te demandera encore du temps et du café
- Tu te trouves un pote/un etudiant a transformer en esclave , ce qui pourra te couter moins cher mais qui est pas tres simpas pour les professionnels et surment pas tres legal
- Te te tournes effectivement vers une entreprise ou un particulier pouvant gager de son serieux.
Perso je ne donne jamais mes codes sources avant d'avoir été payé, la seule fois ou je l'ai fait je me suis retrouvé avec un projet de 100heures impayé et un "patron" envolé avec le projet.. Maintenant je propose toujours : Un plan detaillé de comment je vois la chose, avant de commancer a taffer (ça peut faire gagner du temps aux 2 parties), un acompte (en cas de gros projets) , le travail, une mise en service du projet sur mon portail perso (customisé pour etre identique a celui du client niveau config) et un certain temps de test de la part du client sur le projet (Petit projet : 1 semaine, ...) , le payement du tout , la rente des codes sources pour au client et l'installation sur son serveur.
Avec cette technique mes clients ont toujours été satisfaits et moi aussi ... Donc je continuerai a l'utiliser
Marsh Posté le 22-03-2005 à 19:19:45
Voilà en fait je me lance actuellement dans un gros projet qui nécessite pas mal de sécurité. Et je sais que mes connaissances en php ont leurs limites et c'est pourquoi je viens ici vous demander ce que vous pensez de ce code, surtout du point de vu de la sécurité.
Désolé pour la longueure et d'avance, merci.
Et bonne soirée bien sur.
Edit:
Pas de réponse? Je sens une grosse fléme (que je comprends) de lecture et d'interprétation,lol.
Non?
Message édité par dwogsi le 22-03-2005 à 23:11:50
---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/