Forum Programmation.php pages perso attente pour force brute

Posté par  .
Étiquettes : aucune
0
25
juil.
2004
Voila, j'ai fais un vulgaire script pour sécuriser mes pages perso :




<?
$texte=$_POST['motdepasse'];
if ($texte=='motdepasse')
{
echo "Ok";
}else{
echo "tapez le mot de passe :";
}
?>








Et déjà, c'est assez sécurisé si je met une page nommée index.html dans ce répertoire, on ne pourra pas avoir accès a pagesuivante sans connaitre ou :
le mot de passe
l'adresse de page suivante

Or, par force brute on m'a dit que c'était faisable...
évidement, je vais mettre un nom long pour pagesuivante.htm mais ça m'énerve de mettre un mot de passe long... Donc, je cherches une fonction permettant de faire attendre 3 seconde en cas d'échec avant d'actualiser la page...

Voila, donc une fonction du genre sleep en Qbasic ou settimeout en javascript
Comme vous L'avez peut être remarqué, je n'utilises pas le php depuis très longtemp...
  • # dsl mon code n'est pas bien passé

    Posté par  . Évalué à -1.

    &lthtml&gt
    &lthead&gt
    &lt/head&gt
    &ltbody&gt
    &lt?
    $texte=$_POST['motdepasse'];
    if ($texte=='themax')
    {
    echo "&lta href='page.htm'&gtOk&lt/a&gt";
    }else{
    echo "tapez le mot de passe :";
    }
    ?&gt
    &ltform method="post" action="pwl.php"&gt
    &ltinput type="password" name="motdepasse" size="10"&gt
    &ltinput type="submit" value="OK"&gt
    &lt/form&gt
    &lt/body&gt
    &lt/html&gt
    • [^] # Re: dsl mon code n'est pas bien passé

      Posté par  . Évalué à 1.

      mais ici on fait comment pour que les < &lt et agt > soit bien affichés ?
      • [^] # Re: dsl mon code n'est pas bien passé

        Posté par  . Évalué à 3.

        « mais ici on fait comment pour que les < &lt et agt > soit bien affichés ? »
        Comme cela :
        &lt;html&gt;  -->  <html> (note les «;»)
        Tu as aussi un bouton `Vérifier' pour visualiser ton message avant de l'envoyer...

        Fab.
  • # htaccess

    Posté par  (site web personnel) . Évalué à 3.

    Une protection par authentification HTTP ne te conviendrais pas ? C'est beaucoup plus simple...

    En général, les hébergeurs expliquent comment faire dans leur FAQ. Ça passe par l'utilisation d'un fichier .htaccess
    • [^] # Re: htaccess

      Posté par  . Évalué à -1.

      disons simplement que je suis mon hébergeur...
      J'ai installé une debian que mon voisin m'a configuré
      sinon, je penses que c'est bcp plus chiant pour les personnes qui vont sur mon site
      c'est aussi chiant pour moi car c'est un peu plus dur d'ajouter ujn fichier, la, j'ai juste une ligne a insérer, alors que les .htacces je pourais, mais je devrais ajouter un utilisateur...
      • [^] # Re: htaccess

        Posté par  . Évalué à 0.

        personne n'a de solution ?
        • [^] # Re: htaccess

          Posté par  (site web personnel) . Évalué à 2.

          Bah avec le .htaccess tu protège d'un coup tout un répertoire. Je trouve ça plus simple mais bon...

          Sinon, je pense que tous les site de truc et astuces pour PHP doivent avoir des exemples de protection par mot de passe.

          Pour ce qui est d'une attaque "brute"... Le temps necessaire pour se faire servir une page est à mon avis suffisant pour éviter tout problème.
  • # non

    Posté par  (site web personnel) . Évalué à 3.

    Si j'ai bien compris, tu veux vérifier le mdp et rediriger la personne vers une page à l'url "impossible à deviner" s'il est correct. C'est pas la bonne manière de faire. Si tu penses vraiment que ton url peut rester "secret", autant donner l'url comme mdp, pas besoin de te casser la tête avec PHP et ça sera pas moins sécurisé. Ca le sera même plus si la "difficulté" du mdp est moindre que celle de l'url. Si elle l'est plus, c'est le mdp qui sert à rien.

    Maintenant si tu veux un "vrai" accés par mdp, tu vas devoir soit tout mettre dans la même page PHP protégée par elle même (affichage de la page uniquement si le mdp est correct, pas moyen de contourner comme c'est le cas dans ton exemple), soit utiliser les sessions et les cookies pour protéger les autres pages (accès que si le cookie est bon et le cookie ne peut être mis que par la page de login, ou un truc comme ça, j'ai jamais touché à ça), soit utiliser une protection au niveau d'Apache comme suggéré plus haut, qui va te permettre de protéger tout le répertoire du même coup.

    A mon avis, la solution la plus facile/rapide à mettre en place est celle des htaccess. C'est pas plus compliqué que ta solution, ça l'est même moins: t'as pas à faire de PHP, t'as juste à maintenir un fichiers d'utilisateurs/mdp. Si tu veux tu peux t'amuser à faire une interface PHP pour gérer le fichier. Si tu veux vraiment pas avoir à taper un login mais juste un mdp, alors amuse toi avec les sessions/cookies ou intégre tout dans la même page si c'est possible.

    Pour le problème du brute-force. Avec le système actuel, le méchant n'a qu'à brute-forcer un URL ou un mdp, le plus faible des deux. Avec le htaccess, il doit brute-forcer un login+mdp (en admettant que le login reste "secret" aussi). De toute façon toute application de ce genre est "brute-forçable". Si tu penses que ça en vaut la peine, tu as plusieurs solutions pour limiter les risques. Le plus simple est probablement de bien choisir le mdp, après tu peux t'arranger pour qu'on ne puisse pas faire plus de X tentatives de login par heure (mais pas avec des cookies, du JS ou autre truc "client-side", dans ce cas ça sert à rien et ça fait chier les visiteurs) ou commencer à chercher un système d'authentification plus correct (à coups de PGP/SSL/TLS/... par exemples) mais ça devient tout de suite plus lourd. Yavait un article sur l'authentification par mdp dans le Linux Magazine France du mois dernier je pense (si qqun avec le magazine sous la main peut confirmer...). Ca peut peut-être t'intéresser.

    Personnellement, j'ai un serveur FTP avec un compte "invité" qui me sert de temps en temps ("hé pq je peux pas t'envoyer de fichiers par MSN?"). Le mdp change aléatoirement toutes les X heures et il est enregistré dans un fichier auquel moi seul ai accés. Avec ça, bonne chance pour le brute-force. Faut voir si ça peut être applicable à ton cas. Dans le même genre, voir http://slashdot.org/comments.pl?sid=111503&cid=9469343(...)
    Le mdp est généré par exemple par un md5 de la somme de l'heure actuelle et du "vrai" mdp (une truc plus correct serait genre md5(md5(time).md5(passwd)), le "." pour la concaténation). Comme ça, toute personne qui a le "vrai" mdp peut reconstituer le mdp actuel mais il change toutes les X heures/minutes. Tu peux aussi t'arranger pour que le mdp change après que qqun se soit loggué, comme ça si la connexion est sniffée, l'attaquant ne sait quand même pas obtenir le mdp puisqu'il a déjà changé (mais bon dans ce cas tu as d'autres problèmes).

    Par ailleurs je recommande la lecture de cet article-ci à tous ceux qui débutent dans les applications web (et ça peut surement pas faire de mal à ceux qui en font déjà depuis un moment): http://www.linux-mag.com/2002-09/security_01.html(...)

    Pour le coup des md5, vaut mieux comprendre ce qu'on fait avant de l'implémenter. Voir par exemple dans le même magazine: http://www.linux-mag.com/2002-09/cryptography_01.html(...)

    -- Krunch le parano

    PS: désolé pour les anglicismes et fautes d'orthographes/grammaire mais il est 3h30 passé là

    pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.

    • [^] # Re: non

      Posté par  . Évalué à 2.


      Personnellement, j'ai un serveur FTP avec un compte "invité" qui me sert de temps en temps ("hé pq je peux pas t'envoyer de fichiers par MSN?").


      J'avais le même problème jusqu'à ce que j'installe la dernière version de Gaim. Je crois que Kopete supporte les transferts de fichiers aussi, les autres je sais pas...
      • [^] # Re: non

        Posté par  . Évalué à 0.

        j'ai pas vraimnet compris le dernier message... si qqn a une adresse msn, je lui conseille amsn sur sourceforge... c'est 4* mieux que gaim et que kmess réunis... mon adresse msn c'est coucou747@hotmail.com

        Merci pour vos commentaires, avec ça, je devrais pouvoir me débrouiller...
        J'ai ajouté une instruction sur mon script :
        sleep(3)
        eh oui, le php, c'est comme le qbasic...
        Donc voila, ce passage la ne sera pas forcé par force brute...
        Ensuite, vous dites que je dois mettre toutes mes pagezs perso en php... pour lire les cookis... euh... la flème, j'ai plusieurs répertoires... et plusieurs centaines de fichiers a l'intèrieur... pas tous en html... Donc, je ne sais pas si ça changerais grand chose...
        • [^] # Re: non

          Posté par  . Évalué à 3.

          Ne communique pas ton adresse mail en clair malheureux !
          La famille Kabila va prendre contact avec toi maintenant...

          Fab.
          • [^] # Re: non

            Posté par  . Évalué à -1.

            bon alors je communique en crypté : "en crypté"
            eh oui, il y a aussi des dingues parmi les linuxois...
            Si il y a un admin ici, je lui demande d suprimer imédiatement coucou747 de ce forum!!!

            lol
            nonon addmin, c'est pour déconner le fais pas stp
            lol
        • [^] # Re: non

          Posté par  (site web personnel) . Évalué à 2.

          J'utilise uniquement Jabber et les transports. Pour autant que je sache, il n'existe pas encore de moyen de transférer des fichiers avec les clients MSN/ICQ/... en utilisant les transports donc voilà. L'avantage c'est que je peux utiliser une seule connexion SSL pour me connecter à toutes mes adresses d'IM. Vu que je passe la moitié de mon temps sur un réseau non switché où tout le monde peut sniffer ce qu'il veut, je trouve ça assez pratique (bon ça serait switché ça serait presque pareil).

          Sinon pour le transfert de fichiers sans FTP/MSN/... -> http://linuxfr.org/tips/296.html(...)

          Pour en revenir à cette histoire de mdp, si tu as gardé le même fonctionnement, pas besoin d'utiliser de mdp. Le seul "secret" à connaitre est l'url. Pour protéger les répertoires, le htaccess est probablement la meilleure solution. Je pense que ça le fait même récursivement.

          Le délais de 3 secondes empéche rien: qqun peut brute-forcer tranquillement avec X connexions en paralléle, il aura juste les résultat de chacune 3 secondes plus tard mais rien ne l'empèche de refaire une requète avant que le délais se soit écoulé. Et en fait il a même pas besoin de faire ça, il a juste à "brute-forcer" l'url.

          Un truc plus "sécurisé" serait de faire une page PHP qui prend 2 paramètres: le mdp et le fichier à accéder. Si le mdp est correct mais que le fichier à accéder n'existe pas, tu "fournis" un listing des fichiers. Si le mdp est correct et le fichier existe, tu renvois directement le fichier. De cette manière tu peux interdire complétement l'accés aux fichiers directement via Apache: on ne peut y accéder que par l'interface web. Mais il faut faire très attention aux fichiers accessibles (gaffe aux trucs genre .. et liens symboliques). Idéalement tu devrais avoir le listing des fichiers accessibles défini explicitement dans un fichier de configuration par exemple.

          Ce genre de script existe déjà, suffit de chercher un peu. Enfin pour le mdp je suis pas sur mais ça tu peux le rajouter au niveau d'Apache et comme ça tu n'as qu'une seule page à protéger.

          pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.

          • [^] # Re: non

            Posté par  (site web personnel) . Évalué à 2.

            Pq j'ai mis des guillemets à "fournis" moi.

            pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.

    • [^] # Re: non

      Posté par  . Évalué à 2.

      Tu es de bon conseil pour coucou747. Il devrait t'écouter s'il veut faire qqchose d'un peu secure.

      ---

      Mais si on veut un peu titiller ton systeme de mots de passe invité, il est tout ausi brute forçable.

      On connait le login et l'heure actuelle. Il suffit d'employer l'algorithme avec des mots de passe aléatoire pour arriver au résultats.

      En plus le md5 n'est pas gourmant en temps procs donc il ne retarde pas le calcul.

      Fin c'était juste pour parler :)
      • [^] # Re: non

        Posté par  (site web personnel) . Évalué à 2.

        C'est juste, j'avais pas pensé à ça. Merci.

        pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.

        • [^] # Re: non

          Posté par  . Évalué à 0.

          j'avais pas pensé au fait que qqn puisse faire plusieurs requettes...
          Je penses que le problème ne me concerne pas vraiment car j'ai un p133 comme serveur apache alors plusieurs requettes...
          si je met un mot de passe sufisement long, de toute façon, il ne pourra pas passer avant six mois ?

          Comment je peux faire pour savoir si la page est déja ouverte ? Comment empécher cette éventualitée (DSL, si je file l'url a des windowsiens, ils vont pas comprendre que c'est sécurisé si il n'y a pas de mot de passe... et c'est rassurant de voir que la page est un peu protégée... (même si ce n'est que de la déco)...)

          Enfin voila
          Merci d'avance
          • [^] # Re: non

            Posté par  . Évalué à -1.

            ah oui, j'oubliais our le protocole messenger, j'ai tout essayé, c'est vraiment amsn le meilleur... pas gaim ni kopete, ni kmess ni autre...
            Si vous possédez amsn, et que vous voulez un programme qui vous permet de mettre en forme vos conversations (elles sont toutes enregistrés dans /home/toto/.amsn/bidule@hotmail.com/logs/) pour les mettre en forme au format html, j'ai un programme qui pourait vous interesser...mep.c disponible sur mon site parmi les autres programmes C
          • [^] # Re: non

            Posté par  (site web personnel) . Évalué à 2.

            Je crois que tu peux limiter le nombre de requètes en // dans la configuration d'Apache (RTFM) mais ça risque d'être assez embétant pour les visiteurs. C'est pas parce que c'est un P133 qu'il ne peut pas répondre à plusieurs requètes en même temps. Si tu mets un mdp suffisament "compliqué" (un mdp long mais "facile" à deviner c'est pas mieux qu'un mdp de 4 caractères aléatoires), c'est l'url qui va être plus facile à deviner. Le problème c'est qu'au mieux ton système de mdp ne sert à rien et au pire ça permet de cracker plus facilement.

            Si le but c'est juste de faire croire que c'est sécurisé au premier neuneu venu alors je sais pas pourquoi tu as demandé de l'aide ici.

            Je comprends pas pourquoi tu veux pas utiliser les htaccess.

            pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.

            • [^] # Re: non

              Posté par  . Évalué à 0.

              les .htaccess ?
              bah disons que j'ai eu jusque la de mauvaises expériences avec les fichiers de configurations linux...
              c'est pas joljoli comme système de mot de passe...
              on peut pas facilement le configurer
              on doit ajouter des utilisateurs
              ect...

              Et pour trouver un mot de passe qui est composé de plusieurs mots sortant tout droit des parties les plus débiles de mon cerveau reliés par un _ ... je crois que le craker aura un peu de mal... idem pour l'URL dans le dossier : il y a index.html donc, il ne verra pas les autres répertoires et les autres répertoires ont aussi des noms a la con longs ect... introuvables je penses

              enfin, je voudrais que vous m'expliquiez comment tester si le script php est déja a s'executer
              • [^] # Re: non

                Posté par  (site web personnel) . Évalué à 2.

                Pas besoin d'ajouter des utilisateurs. Tu as juste à ajouter une ligne avec login:mdp dans le fichier qui va bien. Si tu veux gérer le fichier par une interface web, Pear est ton ami. C'est pas plus compliqué que de s'amuser à écrire un système d'authentification potentiellement foireux.

                http://pear.php.net/package/File_Passwd/docs/0.9.2a/File_Passwd/Fil(...)

                Par ailleurs maintenant que tu as dit comment tu trouvais tes mdp, il est bcp plus facile (moins difficile en tout cas) de les cracker :op

                Pour éviter d'avoir plusieurs fois le même script qui tourne en parrallèle, on utilise des verrous: tu bloques un verrou au début du script et tu le libéres à la fin. Après tu vérifies si le verrou est bloqué, si c'est le cas le script est en train de tourner. En pratique tu peux utiliser flock() ou une entrée dans une base de données (MySQL sur un P133 avec 48Mo de RAM c'est pas top cependant). Le truc à _ne_ _pas_ faire est d'utiliser un bête fichier genre
                while (file_exists($lock)) sleep(0.1);
                create_file($lock);
                /* do stuff */
                delete_file($lock);
                Parce que tu n'est pas certains que le fichier n'aura pas été verrouillé par un autre process entre la fin du while et le début du create_file(). Enfin dans 99% des cas sur une machine mono processeur ça ne devrait pas poser de problème mais de toute façon il vaut mieux utiliser flock() qui est fait pour ça (mais c'est pas super portable). Dans ton cas tu peux écrire la date (temps epoch) de la dernière tentative d'authentification dans une db ou un fichier (mais dans ce cas tu dois quand même utiliser flock()) et vérifier que le délais est respecté.

                pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.