Authentification par challenge MD5

Messages postés
182
Date d'inscription
dimanche 29 juin 2003
Statut
Membre
Dernière intervention
18 avril 2008
- - Dernière réponse : stu76
Messages postés
186
Date d'inscription
samedi 5 mars 2005
Statut
Membre
Dernière intervention
17 février 2008
- 13 févr. 2007 à 20:04
Bonjour tout le monde,
j'ai code un petit script d'authentification login/pass PHP qui fonctionne sur le principe d'un challange par MD5.
le code est relativement simple et court et il fonctionne mais ma grande question c'est : et il secure ?
l'idee etant que quelqu'un qui ecoute la connexion ne puisse pas retrouver le login/password d'aucune maniere.
Voici le code :

<?php session_start();processForm(); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
    <title>PHP Wake On LAN</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <script type="text/javascript" src="md5.js"></script>
    <script type="text/javascript">
    function SubmitDiggest()
    {
        if (document.inputForm.login.value != "" && document.inputForm.password.value != "")
        {
                document.inputForm.digLogin.value = MD5(document.inputForm.login.value + document.inputForm.diggest.value);
                document.inputForm.digPassword.value = MD5(document.inputForm.password.value + document.inputForm.diggest.value);                document.inputForm.login.value "";document.inputForm.login.disabled true;                document.inputForm.password.value "";document.inputForm.password.disabled true;                document.inputForm.diggest.value "";document.inputForm.diggest.disabled true;
                document.inputForm.submit.disabled = true;
                return true;
        }
        else
                return false;
    }
   </script>
</head>

<form action="" method="post" name="inputForm" onsubmit="return SubmitDiggest();">
    login:

    password:

   
      
      
       " />
      
   

</form>

</html>
<?php

function processForm()
{
        $login = "jyce";
        $pass = "mmm";
        if (isset($_POST['digLogin']) && isset($_POST['digPassword']))
        {
                if ($_POST['digLogin'] == md5($login.$_SESSION['rand']) && $_POST['digPassword'] == md5($pass.$_SESSION['rand']))
                {
                        echo "successfuly";
                }
                else
                {
                        echo "failed";
                }
        }
        print_r($_POST);
}

function InitDigest()
{
         $_SESSION['rand'] = md5(rand());
         return $_SESSION['rand'];
}
Afficher la suite 

7 réponses

Messages postés
182
Date d'inscription
dimanche 29 juin 2003
Statut
Membre
Dernière intervention
18 avril 2008
0
Merci
dites? Ya pas moyen d'editer les messages ?
Commenter la réponse de psyjc
Messages postés
947
Date d'inscription
mercredi 19 novembre 2003
Statut
Membre
Dernière intervention
5 avril 2008
3
0
Merci
Salut,

Si quelqu'un ecoute deja les idenfiants login/password c'est qu'il a deja un accee a la machine de la victime, il pourais trés bien keyloggé les frapes , ça lui serais plus utile pour les numeros de carte bleu (HTTPS) par exemple..
Ta methode pourais ce montrer bien, si seulement l'utilisateur n'avez rien a saisir au clavier :)

La seul chose qui me vient a l'idée c'est l'argument autocomplete="off", qui ne rempli pas le champ, si quelqu'un a un accee physique à la machine. (cassable par une faille XSS).

Pour editer les messages, c'est pas possible de le faire soit-meme, contact un admin.
Commenter la réponse de juki_webmaster
Messages postés
182
Date d'inscription
dimanche 29 juin 2003
Statut
Membre
Dernière intervention
18 avril 2008
0
Merci
Oui, je sais qu'avec un keylogger on peut directement "capturer" les infos a la source. Mais ici c'est plutot les attaques pour lesquelles un acces a la machine cliente est impossible. c'est a dire les techniques de sniffing, Man in the middle ou vol de sessions, ou d'autres auxquelles je ne pense pas forcement...
Commenter la réponse de psyjc
Messages postés
947
Date d'inscription
mercredi 19 novembre 2003
Statut
Membre
Dernière intervention
5 avril 2008
3
0
Merci
Man in the middle > ça revient au meme, dans ce cas l'attaquant n'a pas a donner un formulaire avec du Javascript utilisant MD5, car il ne pouras pas obtenir le mdp en claire, donc il envoie une page sans ton JS, le client valide, il obtien les identifiants en claire, qu'il hash est renvoie au serveur, bingo !

Vol de sessions > eviter les failles XSS (htmlentities() & cie), ne pas transmettre le SESSID dans l'url etc.. si ya MITM ça ne sert a rien.

Sniffing > oué ça pourais proteger, au pire l'attaquant s'identifit avant la victime (). mais n'auras pas ces identifiants !
Commenter la réponse de juki_webmaster
Messages postés
182
Date d'inscription
dimanche 29 juin 2003
Statut
Membre
Dernière intervention
18 avril 2008
0
Merci
Ok, jai compris.
Pense tu qu'il soit possible d'optimiser ce code afin de le rendre plus secure sachant que je ne peux ni me servir d'https, ni d'authentification http (basic/digest) car les clients qui vont appeler cette page ne supportent pas ces modes.
Commenter la réponse de psyjc
Messages postés
198
Date d'inscription
lundi 28 février 2005
Statut
Membre
Dernière intervention
14 novembre 2008
0
Merci
Perso, le md5() m'a pas convaincu ensuite j'ai essayé crypt() marche pas et ensuite sha1() : c'est bon il fonctionne !
Commenter la réponse de Epoc22
Messages postés
186
Date d'inscription
samedi 5 mars 2005
Statut
Membre
Dernière intervention
17 février 2008
1
0
Merci
Hello,

Moi pesro j'utilise MD5 mais je fais un assemblage car le moyen de piratage ne permettent pas encore de casser le cryptage MD5. Il existe bien des banques de données dans lesquels on trouve des milliers de mots et leurs équivalent MD5 et c'est avec c'est robot que bcp de hackers rentre dans les systèmes protégés.

Donc moi, je mets un variable dans un fichier comme le connection.php ou le haeder.php peut importe. Cette variable contient des caractères spéciaux exemple :

$cript = '[mailto:'&|@²²³{}!è°-_' &|@²²³{}!è°-_'];

ensuite quand on enregistre le mots de passe de l'utilisateur je fais une addition de c'est deux clés exemple :
$pass = 'mot de passe utilisateur
$a =md5($script); // première valeur
$b=md5($pass); //deuxième valeur

$c= $a && $b;

Le pass enregistrer dans la base de données est beaucoup plus complexe que celui de l'utilisateur, résultat aucun robot ne peut casser ce genre de montage.

Pour info il parrait que sha1 n'est pas bon, il est bcp plus fragile que md5.

Voilà, c'est mon avis la méthode que j'utilise sur plusieur site sécurisé, bien entendu j'utilise le https en plus de cette sécurité.

++

Stu76
Commenter la réponse de stu76