|
Publicité ' | ||||||||||||||||||||||||
|
|
#81 | |
|
Membre du Club
![]() Inscription : avril 2004 Messages : 76 ![]() |
pour la perte de mot de passe, de toute manière ca sera à l'administrateur de décider quelle méthode est la plus adapté (on avais dejà discuté des solutions).
Pour le mail/question secrète je suis de l'avis du sub0. La sécurité de l'appli ne doit dépendre que d'elle même. Si on renvoie le mdp sur un mail pas sécure ca foutrait tout en l'air. Quand au choix des questions, c'est encore une fois a l'admin de décider je pense
L'attaque par dico ne marche pas, et si la question est bien choisie, le risque est très faible. Citation:
quand au question, à la volée je dirait • N° d'immatriculation de sa caisse • Artiste préféré (je pense que le choix est vaste, tout le monde ne dira pas alizée comme moi) |
|
|
|
00
|
|
|
#82 |
|
Invité régulier
![]() Inscription : mars 2004 Messages : 8 ![]() |
On a paypal qui propose de retenir 2 questions différentes.
Les questions sont : Nom de jeune fille de votre mère - 4 derniers chiffres de votre carte d'identité - Votre lieu de naissance - Ville de naissance de votre père - 4 derniers chiffres de votre permis de conduire. |
|
|
00
|
|
|
#83 |
|
Invité régulier
![]() Inscription : juin 2004 Messages : 9 ![]() |
Pour les cookies d'autoreconnection, je suis assez contre l'idée d'y inclure quoi que ce soit comme donnée qui soit exploitable directement.
Un id utilisateur, un login ou un pass même hachés au moyens d'un md5 ou d'un sha-1 me paraissent déjà trop au niveau de l'exposition des données. J'ai utilisé sur mon site un système de tickets. Quand un utilisateur se connecte avec succès sur le site, il reçoit un numéro de ticket (généré aléatoirement, suffisamment long pour supprimer tout risque de collision). Ce numéro de ticket est stocké dans un cookie sur son ordinateur. Parallèllement, le serveur conserve le numéro de ticket auquel il associe le compte de l'utilisateur et des informations supplémentaires (timestamp pour l'expiration du ticket, ip, etc). Lorsque l'utilisateur va revenir, le serveur va vérifier si son ticket existe et n'a pas expiré. Si c'est le cas il le connecte automatiquement et renouvelle le numéro de ticket. J'espère que c'est assez clair =) On peut ensuite associer un ticket à une IP si on est un peu parano, et on peut encore trouver d'autres astuces tordues, mais de base ce système permet de ne stocker côté client qu'une donnée arbitraire, à la façon d'un ID de session. |
|
|
00
|
|
|
#84 |
|
Nouveau Membre du Club
![]() Inscription : septembre 2004 Messages : 71 ![]() |
Salut,
Concernant la génération de hash, le MD5 est maintenant à proscrire. Cet algorithme est cassé depuis quelque temps maintenant et on peut créer des collisions. Mieux vaut se baser maintenant sur SHA-1. Nous avons pu voir qu'un groupe à réussi à prouver les risques de collisions sur cet algo existe aussi. Néanmoins, il est encore difficile à mettre en oeuvre par rapport au md5. Pour plus d'information, je vous recommance dans un premier temps ces urls : http://fr2.php.net/manual/fr/function.sha1.php http://fr2.php.net/manual/fr/function.mhash.php Il y a quelques infos dans ces articles sur les collisions de l'algo MD5 : http://www.cryptography.com/cnews/hash.html http://www.freedom-to-tinker.com/archives/000664.html Cela ne veut pas non plus dire que c'est à la portée du premier scriptkiddie, mais ça reste possible. Néanmoins il y a un risque potentiel à prendre en considération selon la sensibilité de l'application développée. SHA-1 étant considéré plus sûr et ne demandant pas de complexité supplémentaire en terme de développement mérite d'être pris en considération. Toutefois une longue série de post sur bugtraq sur le SHA-1 sont apparus au mois de février 2005 : http://www.securityfocus.com/archive/1/390665 De plus, dans le 'hashage' d'un mot de passe, il est vivement recommandé d'utiliser une graine aléatoire pour chaque compte afin de rendre la génération de collision plus hardues. L'envoi d'un mot de passe 'hashé' en MD5 par une fonction javascript peut être cassé si il est intercépté. Mieux vaut utiliser directement une connection SSL. Enfin tout dépend du niveau de sécurité souhaité @+ |
|
|
00
|
|
|
#85 |
|
Candidat au titre de Membre du Club
![]() Inscription : mars 2005 Messages : 14 ![]() |
Moi j'ai prévu un session_timeout au cas où le visiteur oublie de se déconnecter.
Quand tu vas sur une page sécurisée, si ça fait plus de X minutes que tu n'as rien fait, ben la session existante est détruite. |
|
|
00
|
|
|
#86 |
|
Invité régulier
![]() Inscription : mai 2005 Messages : 31 ![]() |
Il y aussi la possibilité de bloquer apr adresse IP et de façon plus.... sûr l'adresse MAC... le problème c'est que la solution en question n'est pas souple du tout et en prime si la personne utilise une IP dynamique.... ce sera mort pour lui.
Sinon pour les gens qui possèdent une IP fixe cela augmentera la sécurité de façon bien plus importante. Le problème c'est qu'il existe des émulateurs d'adresse MAC.... mais j'ai du mal à imaginer le mec récupérer une adresse MAC, sauf dans le cas où il pirate l'ordi de la personne en question. Mais je pense que tous les systèmes utilisés ne sont valables que pour des sites dits "sensibles" |
|
|
00
|
|
|
#87 | ||
|
Expert Confirmé
![]() ![]() |
Suite à un topic sur l'authentification http, je poste ici le message que j'ai donné...
En fait, d'après ce que j'ai appris, les 3 seuls risques de piratage sont : 1) Le piratage par "force brute". L'utilisateur va essayer toutes les combinaisons de mot de passe jusqu'à tomber sur le bon. C'est un script qui se charge d'automatiser cette recherche. En général, ce genre de hack possède un dictionnaire contenant les mots de passe les plus courants afin d'augmenter les chances de trouver rapidement le bon password... Pour contrer le piratage par force brute, il suffit d'ajouter un compteur-bloqueur qui s'incrémente à chaque échec d'authentification et bloquera le compte au bout d'un certain nombre d'échecs consécutifs. 2) Le piratage par écoute du réseau, également appellé "man in the middle". Pour contrer l'écoute du réseau, la seule solution réellement efficace est d'utiliser une connexion sécurisée avec SSL ou OpenSSL (à la limite SSH, mais je ne le connais pas). L'écoute du réseau n'est pas facile à réaliser, ce n'est pas donné au 1er venu... 3) Les "injections SQL" (utilisation avec base de données uniquement) sont les données postées par l'utilisateur qui sont modifiées afin de détourner les requêtes envoyées à la base de données. Ces données peuvent permettre ainsi de contourner un système d'authentification. Pour contrer cette pratique, il suffit de contrôler et filtrer les variables postées, d'interdire certains caractères pour la saisie, de décomposer ses requêtes SQL en plusieurs, etc... • Voici un exemple d'injection SQL avec une requête d'authentification courante : SELECT * FROM mytable WHERE log='$log' AND pass='$pass' Il suffira de donner comme mot de passe : ' OR 'a'='a et le login de son choix, on obtient : SELECT * FROM mytable WHERE log='admin' AND pass='' OR 'a'='a' • Autre exemple avec la même requête et en donnant ce login : admin'# on obtient : SELECT * FROM mytable WHERE log='admin'#' AND pass='' Le caractère # sert à commenter. Le code qui le suivra ne sera pas pris en compte... Au niveau du formulaire, qu'il soit réalisé avec des inputs type=text ou le dialogue d'authentification de l'header http, cela revient au même. Voici le code que j'utilise pour l'authentificatrion rapide. J'essaye de miniser au maximum les failles de sécurité. J'utilise un formulaire standart et un fichier que je nomme "cnt.php" qui contiendra le nombre d'échecs consécutifs et quelques infos sur le client ayant provoqué l'échec. Ce fichier permettra de bloquer la vaidation du formulaire au bout de 3 échecs. Il possède l'extension php pour interdire l'affichage de son contenu (donc pas besoin d'un htaccess ici) : Code :
La loi est assez persuasive au sujet du hacking : L'accès et le maintien frauduleux (même involontaire) total ou partiel dans tout ou partie d'un système ou délit d'intrusion et propagation de virus est puni d'un an d'emprisonnement et de 15K€ d'amende. Cela est aussi le cas pour l'utilisation d'un code d'accès exact mais par une personne non autorisée à l'utiliser. Les peines sont doublées lorsque le délit entraine une modification ou suppression des données et triplées lorsque l'action est volontaire... à+ |
||
|
|
00
|
|
|
#88 | ||||||
|
Expert Confirmé
![]() ![]() |
Citation:
Citation:
La fonction retourne une chaine vide si un caractère non permis est trouvé : Code :
Code :
J'en profite pour donner ce lien : http://dico.developpez.com/html/477-...te-attaque.php à+ |
||||||
|
|
00
|
|
|
#89 | |
|
Invité de passage
![]() Inscription : janvier 2004 Messages : 6 ![]() |
Détails primordiaux :
INJECTIONS SQL : Ni la fonction AddSlashes(), Ni l'option magic_quotes(=ON) NE PROTEGENT DES INJECTIONS SQL (l'encodage des caractères style %2527 permettent cette injection) UTILISEZ mysql_real_escape_string(); exemple d'implémentation : Citation:
Un mot de passe de 8 caractères se trouve en quelques minutes grâce aux Rainbow tables. (cf http://passcracking.com/) Heureusement la génération de tables de hash devient trop longue au delà de 15-16 caractères (plusieurs années en ayant plusieurs ordinateurs dédiés à cela). Mais une fois ces tables calculées, la recherche du mot de passe est relativement rapide (quelques heures maximum). On vend sur Internet des disques durs entiers contenant ces tables. (encore une fois les mots de passes vraiment longs sont hors de portée) Au sujet des collisions possibles du md5, il y a une confusion : l'algorithme permet de créer, à partir d'une source, un fichier qui aura la même signature que la source. Ce qui pose un problème puisqu'on peut donc insérer un virus dans un fichier et faire en sorte qu'il ait la même signature que l'original ! L'algorithme ne permet donc pas de trouver un mot de passe à partir de son Hash md5 MAIS peut, en théorie (car c'est pour l'instant très difficile à mettre en oeuvre) réaliser une attaque "Man In the middle" http://www.reseaux-telecoms.com/cso_...O/Newscso_view Enfin, n'oubliez pas que le sacrosaint SSL n'est pas la solution miracle parfaite car certains certificats utilisent le md5 ou SHA... Mais il reste une excellente solution pour la sécurité surtout avec un encodage 3DES (clef de 168 bits) |
|
|
|
00
|
|
|
#90 | |
|
Membre Expert
![]() ![]() Inscription : janvier 2004 Messages : 1 242 ![]() |
Citation:
ca c'est html_special_chars ou html_entities... mysql_real_espace_string ne remplace jamais les entitées html... De plus, je pense qu'il est toujours préférable de stocker en base EXACTEMENT ce que l'utilisateur a tapé. Sur un forum par exemple, il conviendra de stocker les retours chariots en \n et/ou \r au lieu de stocker <br>... pareil pour les entitées html. Cela pour des problemes de modifications par exemple. Si tu edite ton message, tu va devoir te faire une methode pour faire l'inverse de html_special_chars... est-ce vraiment utile ?? |
|
|
|
00
|
|
|
#91 |
|
Invité de passage
![]() Inscription : février 2006 Messages : 10 ![]() |
Bonjour,
Petite suggestion: Mettre un délais supplémentaire (une seconde) pendant la vérification du login/mot de passe par un compte. Ainsi, les ataques du type Brute Force deviendront inéficasses. Mais aussi, on peut suspendre tous les comptes pour quelques minutes minutes pour une IP ayant effectué trop de tentatives. C'est un peu le concept du système d'authentification UNIX et l'idée du fail2ban que j'ai adoptée. Mais surtout, il s'agit du respect d'une stratégie de sécurité par le développeur. |
|
|
00
|
|
|
#92 |
|
Membre émérite
![]() Inscription : janvier 2006 Messages : 953 ![]() |
J'ai lu dans la presse que certaines banques sont en train de mettre en place des systèmes de type Secure-ID (carte générant des numéros selon un algo prédéfini, à entrer lors de la connexion) pour les clients qui le demanderaient. Pourquoi juste ceux-là ? Parce que ca coûte cher.
|
|
|
00
|
|
|
#93 |
|
Invité de passage
![]() Inscription : février 2006 Messages : 9 ![]() |
Concernant les banques ce n'est pas un projet mais une réalité, pour les banques Suisses du moins.
Elles utilisent 2 méthodes à ma connaissances pour l'E-Banking: 1) La banque t'envoie par courrier "réel" une liste de numéro à saisir (un par connection) en plus du login/mot de passe. A chaque connection tu biffes un numéro. 2) La banque t'envoie un petit boitier qui affiche un numéro digital qui change toutes les heures. Quand tu te connectes suffit de le saisir avec le login/mot de passe. Bien sûr ils ont aussi des certificats et ils utilisent https... Sinon moi j'ai commencé le php y'a 3 jours mais je vais quand même essayé de répondre à la question d'après les quelques infos que j'ai lues. 1) Enregistrement Pour un espace membre il faut d'abord un formulaire d'inscription. Celui-ci enregistrera le mot de passe et login dans ta base de données, les sessions ne me semblent pas très utiles pour cette étape. Concernant le mot de passe, il faut veiller à ce qu'il ne comporte pas de caractères invalides. Ca se fait grace aux fonctions de parsing, j'ai vu un exemple avec trim() et htmlspecialchars() combiné. Il faut également hashé ton mot de passe, tu peux utiliser la fonction md5 pour le faire. Attention cette fonction renvoie une chaine de 32 caractères hexadécimals. Je suppose que pour le type de données faut donc choisir un VARCHAR(32). Bref, tu n'auras plus le mot de passe initial donc pour les authentifications ultérieures tu devras systématiquement faire subir aux mots de passe le parsing/hashage que tu as utilisé à l'enregistrement. Un des risques c'est le passage du mot de passe à travers le réseau, entre le client et le serveur. Si tu veux éviter qu'il passe en clair il faudra installer Https sur ton serveur. Ainsi les données seront cryptées sur la machine cliente puis décryptée une fois parvenue au serveur par un système de clés publiques/privées. Https c'est gratuit mais ça demande un peu de configuration, il n'y a rien à changer pour tes adresses d'après ce que j'ai vu, Apache s'en charge et pour les clients s'est aussi automatique. Tu peux également acheter un certificat qui prouvera aux clients qu'ils sont sur un site de confiance (remarque les sociétés qui fournissent les certificats sont probablement pas 100% sûre de savoir si l'acheteur est honnête ou pas). Bien sûr faut aussi forcer les gens à introduire un mot de passe de taille suffisante, avec des caractères spéciaux, etc. 2) l'authentification Il y a plusieurs risques pendant l'authentification. D'abord le brute-force que tu peux éviter efficacement en augmentant le délai de connection à chaque essai de l'utilisateur. Pour ça faut utiliser une session avec une variable qui vaut 1 à la 1ère tentative puis 2, 4, 8, etc. Enfin quelque chose du genre. Un autre risque que j'ai retenu c'est les caractères invalides dans les zones de saisie, d'où l'intérêt du parsing. Le répertoire où tu as tes fichiers de sessions peut être sécurisé je crois, je sais pas comment par contre. Sinon j'ai aussi vu qu'il existait un système nommé htacccess qui doit permettre de protèger l'accès à tes zones privées. 3) navigation A l'issue de l'authentification tu peux remplir quelques variables de session contenant l'adresse IP ou le login. Ensuite à chaque ouverture de page tu vérifies que ces variables soient toujours là et tu compares l'adresse IP de la Session avec l'IP du client. Sinon utilise plutôt la méthode POST, évite les cookies et utilise des champs password. Y'a surement plein d'autres trucs mais j'en suis à mes débuts. N'oublie pas aussi de sécuriser ta base de données, j'ai pas encore étudié les possibilités à ce niveau mais il faut probablement empêcher les requêtes provenant de l'extérieur et bloquer un maximum de port. Y'a surement aussi quelque chose à faire au niveau de la connection à la base de données, faut peut-être éviter d'utiliser un compte root (administrateur) pour faire de simple SELECT en php. D'ailleurs si quelqu'un peut me donner une stratégie à ce sujet je suis preneur. Voilà bonne chance! |
|
|
00
|
|
|
#94 | |
|
Expert Confirmé
![]() Maxime PasquierExpert PHP Inscription : novembre 2004 Messages : 2 123 ![]() |
Histoire de relancer de débat avec m@, mathieu, Sub0, et les autres :
j'ai plusieurs questions :
Voila. Sinon moi je pensais a ca comme systeme. (sachant que pour éviter le sniffing de mdp il faut un SSL (https) ou utiliser la méthode du grain de sel) - utilisation des sessions PHP. - les scripts php stocke l'IP, type du navigateur, etc. du mec quand il se loggue. et a chaque fois qu'on accede a un page web on reteste l'IP et les autres infos. si il y a eu usurpations de sessions cela est découvert. * dans le cas ou on peut penser que le hacker a aussi fait du spoofing d'IP et qu'il a la bonne IP et les bonnes caractéristiques pour se faire passer pour l'internautes. Pourquoi ne pas généré un nombre aléatoire a la connexion de l'utilisateur et qu'il se trimbale avec dans l'url ou autre part (a vous de m'aider) pour faire cette vérification en plus... Voila ou j'en suis arrivé apres la lecture de tout ces posts (ce fut long et heureusement que je les avais imprimés.) Si j'ai loupé des trucs faite moi signe.
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur. Mon espace Développez : mes Créations. Rencontre & Carte des Membres de Developpez.com, version 3.0 |
|
|
|
00
|
|
|
#95 | |
|
Expert Confirmé
![]() Maxime PasquierExpert PHP Inscription : novembre 2004 Messages : 2 123 ![]() |
salut,
je viens rajouter mon grain de sel, car effectivement j'ai trouvé une faille dans celui-ci. Je ne sais pas si SPIP utilise toujours ce que Mathieu a expliqué pour leur systeme de login, mais je pense avoir trouver une grosse faille. Citation:
il entre son mdp et avec javascript il envoie au serveur md5(GDS+mdp) et md5(GDS2+mdp), le serveur dis oki ca correspond avec ce que j'ai, il remplace son md5 par md5(GDS2+mdp) remplace son GDS par GDS2 et recréé un nouveau GDS2. Jusque la tout le monde est d'accord. mais en fait y avait un petit malin qui écoutait entre le pc et le serveur. Je rappelle que dans ce cas on essayait de trouver un moyen pour ne pas utiliser un protocole SSL (https) Donc le hacker a ecouter md5(GDS+mdp) et md5(GDS2+mdp) or voila le premier ne lui sert a rien on est bien d'accord, mais le deuxieme ... BAh c'est EXACTEMENT le md5 que le serveur attend pour la prochaine connexion !!! Y a comme un probleme ici. Donc apres le hacker se connecte avec le md5(GDS2+mdp) en l'envoyant au serveur et en donnant un autre md5 (celui qu'il veut) et ainsi il prend la place de l'internaute sans aucune difficulté !! Qu'en dites vous ?? Heureusement (il y a findus) j'ai une solution.
vous allez me dire que le md5(du mdp) est stocké comme ca sur la BDD, mais c'est le cas sur la plupart des appli non ??
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur. Mon espace Développez : mes Créations. Rencontre & Carte des Membres de Developpez.com, version 3.0 |
|
|
|
00
|
|
|
#96 | ||||
![]() ![]() Inscription : juin 2003 Messages : 4 892 ![]() |
Citation:
si le pirate est assez fort pour faire du spoofing d'IP il peut aussi triffouiller les DNS du pour que l'e-mail arrive autre part ou bien ilpeut tout simplement pirater la boite mail de l'utilisateur piraté Citation:
Citation:
par contre on n'a jamais dire qu'il faut croire ce qu'il y est ecrit
__________________
Modérateur PHP |
||||
|
|
00
|
|
|
#97 | |||
|
Expert Confirmé
![]() Maxime PasquierExpert PHP Inscription : novembre 2004 Messages : 2 123 ![]() |
Citation:
Parce qu'on dit : si il y a usurpation de ids il faut avertir le client etc. mais si on peut pas comment fait on ? Donc peut on vraiment considérer qu'un email peut etre détruit ou qu'il n'arrive pas à la personne ? Citation:
- son IP - sa config de navigateur - une variable dans l'url ?? parce que si on stocke des variables aléatoire pour reconnaitre une personne dans une variables de session il les aura en se changeant son ids. Par contre : est-ce qu'on peut avoir deux sessions pour un meme utilisateurs ? histoire de rendre le vol d'ids plus difficile ? Il faut trouver un méthode pour découvrir qu'il y a eu usurpation Citation:
il faut ou ne faut pas activer session.use_only_cookies ?? Si je reviens à ce qu'on disait sur l'utilisation du GDS et de SPIP, je trouve que cette faille est vraiment grosse. après je me dis que si on est pas en https (SSL) c'est la merde partout ? je suis en train de voir que beaucoup de site qui devrait etre sécurisé ne le sont pas ... ca fait peur, je préferai quand je ne savais pas tout ca ?? Question : avec un pc sur un rezo local on peut sniffer mais avec une connection direct à internet ? y a encore des risques ? Et donc avec un SSL (https) il ne peut plus y avoir de sniffing ou c'est pas sur a 100 % ?? Pour exemple je viens de prendre le service eCarte Bleue de Bagoo pour ne pas donner mon numéro de carte bancaire sur internet. Voici leur sécurité : accès en https au site, ou au petit logiciel. le login est une combinaison de lettre qu'on ne choisit pas, le mdp aussi ceux deux informations sont envoyés par la poste dans deux courriers séparé. lors de la premiere connexion il faut changer son mdp. (la j'ai mis un truc chiffre + lettre + MAJ pour rester dans le costaux) Et voila.
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur. Mon espace Développez : mes Créations. Rencontre & Carte des Membres de Developpez.com, version 3.0 |
|||
|
|
00
|
|
|
#98 |
|
Expert Confirmé
![]() ![]() |
[PHP] Espace membre :
http://www.developpez.net/forums/showthread.php?t=14438 |
|
|
00
|
|
|
#99 |
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 720 ![]() |
Dans ce sujet, vg33 propose une méthode intéressante :
http://www.developpez.net/forums/showthread.php?t=98673 Mots clefs pour recherche ultérieure : md5 login membre
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework) Ressources PHP - Ressources Zend Framework |
|
|
00
|
|
|
#100 |
|
Expert Confirmé
![]() Maxime PasquierExpert PHP Inscription : novembre 2004 Messages : 2 123 ![]() |
c'est pareil pour spip ou pour ce forum, il y a un script coté client, mais si la personne a désactivé le javascript : le formulaire envoie le mdp en clair, et donc coté serveur il faut prévoir l'arrivée sous deux formes, soit en clair soit en hash.
mais ca marche parfaitement bien dans les deux cas. tu peux tester sur le forum
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur. Mon espace Développez : mes Créations. Rencontre & Carte des Membres de Developpez.com, version 3.0 |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com