Authentification par challenge MD5

psyjc Messages postés 182 Date d'inscription dimanche 29 juin 2003 Statut Membre Dernière intervention 18 avril 2008 - 12 févr. 2007 à 12:37
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'];
}

7 réponses

psyjc Messages postés 182 Date d'inscription dimanche 29 juin 2003 Statut Membre Dernière intervention 18 avril 2008
12 févr. 2007 à 12:41
dites? Ya pas moyen d'editer les messages ?
0
juki_webmaster Messages postés 947 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 5 avril 2008 3
12 févr. 2007 à 13:06
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.
0
psyjc Messages postés 182 Date d'inscription dimanche 29 juin 2003 Statut Membre Dernière intervention 18 avril 2008
12 févr. 2007 à 13:45
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...
0
juki_webmaster Messages postés 947 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 5 avril 2008 3
12 févr. 2007 à 14:21
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 !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
psyjc Messages postés 182 Date d'inscription dimanche 29 juin 2003 Statut Membre Dernière intervention 18 avril 2008
12 févr. 2007 à 15:24
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.
0
Epoc22 Messages postés 198 Date d'inscription lundi 28 février 2005 Statut Membre Dernière intervention 14 novembre 2008 1
12 févr. 2007 à 18:05
Perso, le md5() m'a pas convaincu ensuite j'ai essayé crypt() marche pas et ensuite sha1() : c'est bon il fonctionne !
0
stu76 Messages postés 186 Date d'inscription samedi 5 mars 2005 Statut Membre Dernière intervention 17 février 2008 1
13 févr. 2007 à 20:04
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
0
Rejoignez-nous