IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Expression régulière (regex) pour tester le format d'un password


Sujet :

JavaScript

  1. #21
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 523
    Points : 147
    Points
    147
    Par défaut
    ... sachant que le zéro risque et 100% safe n'existe pas: coté serveur ou coté client, si on veut on peut!

    ce à quoi je pensais au final:
    -> juste restreindre à disons 20 car (min 6) le pass saisi par le user
    -> rajouter un bon préfix+suffix en salt
    -> reste à savoir où stocker le salt:
    * une $variable dans un fichier .php stocké hors www?
    * en bdd, mais il transitera aussi?

    HTTPS: j'y avais pensé oui, mais ne me suis pas encore penché sur la question, comment faire, etc...

    password pas en clair en base: aaaaaaaaaaaaaaah bon????? naaaaaaaaaaaaaaaan!!! on m'aurait menti?????

  2. #22
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    non côté client ou côté serveur ce n'est pas du tout pareil

    je vais caricaturer avec des règles débile
    ^[AB][a-z]{2}$
    bref soit A soit B suivit de deux caractères.

    avec une règle aussi débile pour attaquer le système qui n'expose rien (tout côté serveur) le hacker part sans aucune connaissance il va donc passer du temps à chercher de mots de passe hors de la règle.

    si maintenant je mets ça dans le code js côté client
    le hacker lit la règle ^[AB][a-z]{2}$ dans le fichier js.
    il sait donc qu'il a 2 X 26 X 26 possibilités il peut donc se concentrer sur celles-ci.

    Il y a là une sacré différence.

    si tu choisis d'utiliser un logiciel de hack pour valider tes mots de passe. tu va éliminer les mots de passe trop faibles sans pour autant réduire drastiquement le champs des possibles.

    si tu fais un appel ajax pour valider le mots de passe il faut que cette url soit libre et tu ouvre donc une porte pour faciliter les attaques.

    alors que si tu ne vérifie rien avant l'envoi du formulaire tu peux valider le mot de passe avec une formule connue que du serveur (dico de hack min max par exemple) et quelque soit la raison pour laquelle tu invalide le mot de passe (les deux saisie différentes, trop faible trop court trop long etc.) tu retourne simplement "mot de passe incorrect"

    L'utilisateur sera contraint d'en saisir un autre mais tu ne lui dit pas pourquoi. ainsi tu ne le dit pas non plus à un hacker.

    et pour arranger la sauce tu peux dès le début avertir ton utilisateur
    "Veillez à choisir un mot de passe robuste, vous n'avez droit qu'à 3 tentatives et par mesure de sécurité aucune information ne vous sera fourni en cas d'échec !"

    etc.

    bref la solution qui consiste à donner au hacker les règles d'écriture des mots de passe est la pire de toutes.

    A+JYT

  3. #23
    Membre habitué
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Décembre 2012
    Messages : 129
    Points : 149
    Points
    149
    Par défaut
    Bonjour à tous,

    Je suis un peu hors sujet, mais pourquoi conseillez-vous de stocker le salt et le hash du mot de passe dans deux endroits différents ?

    Bien à vous,

  4. #24
    Membre expérimenté
    Avatar de Gnuum
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2007
    Messages : 215
    Points : 1 715
    Points
    1 715
    Billets dans le blog
    1
    Par défaut
    Si tu te fais hacker ta base de données utilisateurs et que l'attaquant récupère les mots de passe cryptés + le salt, il peut retrouver l'algorithme de cryptage en faisant du brute force (en gros je concatène salt + azerty) et je teste différents algorithmes jusqu'à ce que j'arrive à décoder un des mots de passe. Ensuite, je peux appliquer la méthode sur les autres pour essayer de les décoder.

    C'est là que la dureté intrinsèque du mot de passe entre en jeu. Il est beaucoup plus difficile d'arriver à décoder chaque mot de passe même en ayant le salt (car on utilise la brute force) et plus le mot de passe est compliqué, plus il faut tester de combinaisons. On peut également remarquer que la façon dont est concaténé le salt peut en lui même être une sécurité car l'attaquant a peu de chance de déterminer cette liaison (sauf s'il vole le code en même temps que la base!) si elle est non habituelle (e.g. '@15465' + salt + '#F87pez' + password).

    Enfin, si le salt est stocké sur une autre base de données, il faut que l'attaquant arrive à voler les 2 bases de données pour avoir une chance de reconstituer les mots de passe. C'est un peu plus compliqué à mettre en place, c'est sûr. Mais si tu fais le reste c'est déjà bien.

    Pour revenir, sur les suggestions de non divigulgation des règles de mot de passe et de vérification AJAX, je me permets de faire remarquer que cela ne sert à rien. Tester le format du mot de passe côté serveur plutôt juste du client est une nécessité car on ne peut se contenter de vérifier un input côté client (javascript du formulaire facilement falsifiable). En revanche, faire une requête AJAX pour cacher les règles n'a aucun intérêt puisqu'on sera bien obligé de me les rappeler si je mets un mot de passe avec un mauvais format de toute façon!

  5. #25
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 523
    Points : 147
    Points
    147
    Par défaut
    Débat très intéressant dites-donc, je ne pensais vraiment pas à certaines choses, au départ...

    Par contre, quid de la solution avec une $variable dans un fichier .php stocké hors www?
    -> le serveur web, lui, peut y accéder
    -> en principe un user lambda non, puisque tu ne peux pas entrer 1 url "hors web", à priori, non?

  6. #26
    Membre expérimenté
    Avatar de Gnuum
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2007
    Messages : 215
    Points : 1 715
    Points
    1 715
    Billets dans le blog
    1
    Par défaut
    Par contre, quid de la solution avec une $variable dans un fichier .php stocké hors www?
    Je ne comprends pas très bien ce que tu veux dire exactement mais, en PHP, une variable ne stocke une valeur que le temps où le script qui l'a produite s'exécute (i.e. une requête). Je ne vois pas trop ce que tu veux/peux en faire donc.

    -> le serveur web, lui, peut y accéder
    -> en principe un user lambda non, puisque tu ne peux pas entrer 1 url "hors web", à priori, non?
    Si un utilisateur ne peut accéder à un fichier .php (potentiellement interprété), cela veut dire que le serveur web non plus.
    En revanche, un fichier PHP qui n'est pas rendu accessible par le serveur web peut l'être indirectement s'il est inclus par un autre fichier qui lui est rendu accessible par le serveur web.

  7. #27
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 523
    Points : 147
    Points
    147
    Par défaut
    Oui voilà, il me semblait avoir lu un truc comme ça, une fois, dans un bouquin:

    toto.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    require($pathhorsweb+"safe.php");
    safe.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $host = "......";
    $user = "...........";
    $pass = ".............";
    $bdd  = "..........";
    par exemple pour la chaine de connexion à la DB

    ou par extension
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    define("SALT", "....................");

  8. #28
    Membre expérimenté
    Avatar de Gnuum
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2007
    Messages : 215
    Points : 1 715
    Points
    1 715
    Billets dans le blog
    1
    Par défaut
    La différence entre ta chaîne de connexion à la base de données et ton salt, c'est que c'est mieux que ton salt soit unique par utilisateur (pour maximiser la difficulté de décodage pour chaque utilisateur). De plus, ce n'est pas évident de stocker sa chaîne de connexion à la base de données dans la base de données..
    En revanche, comme je disais, ajouter une sorte de "double salt" via une concaténation complexe dans ton code peut être une sécurité supplémentaire.

  9. #29
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 523
    Points : 147
    Points
    147
    Par défaut
    Ok, donc le principe du fichier hors web, utilisé comme ça, n'est pas bidon alors! Cool, faut que je teste ça!

    De mémoire, dans le bouquin, pour les data sensibles de ce style, y avait aussi:
    -> le php.ini
    -> des variables d'environnement

  10. #30
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 523
    Points : 147
    Points
    147
    Par défaut
    laquelle des 3 méthodes serait la plus safe, pour vous?

  11. #31
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 523
    Points : 147
    Points
    147
    Par défaut
    Pas d'avis sur la question?

  12. #32
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 523
    Points : 147
    Points
    147
    Par défaut
    Bon, ben tant pis.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. regex pour tester un mail ou une URL
    Par rambc dans le forum Général Python
    Réponses: 10
    Dernier message: 23/02/2010, 12h37
  2. Réponses: 1
    Dernier message: 04/09/2009, 12h37
  3. Réponses: 4
    Dernier message: 20/10/2008, 22h34
  4. Problème de pour tester le format d'une String
    Par Virg62 dans le forum Langage
    Réponses: 3
    Dernier message: 12/02/2008, 18h30
  5. pb avec expression régulière (regex)
    Par rudhf dans le forum C#
    Réponses: 12
    Dernier message: 10/05/2007, 15h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo