vérifier le masque d'un md5()

WRInaute impliqué
Bonjour,

C'est une question très simple. Je dois imposer un masque pour une variable dont la valeur est un md5().
J'ai fais cela :



Code:
if (ereg('^[a-zA-Z0-9]+$', $mot))

Le problème est que je ne sais pas quels sont les caractères qui peuvent composer un md5().


Autre question au passage : doit-on plutot utiliser ereg ou preg_match pour les expressions rationnelles ?


Merci d'avance
 
WRInaute accro
lol

:arrow: pour le md5 voir la doc.

ereg est moins performant que preg. Il sera d'ailleurs supprimé dans PHP6.
 
WRInaute impliqué
thierry8 a dit:
lol

:arrow: pour le md5 voir la doc.

ereg est moins performant que preg. Il sera d'ailleurs supprimé dans PHP6.

Oui j'ai lu la doc, tout de même mais le vocabulaire utilisé ne me parle pas trop et je veux être certains de faire les choses correctement.

Donc concrètement, dans un md5(), que peux-t'on trouver ? que des lettres et des chiffres ? Et les lettres, peuvent-elles être en majuscule ?
 
WRInaute impliqué
Ouaip.

Sans majuscules ? Au pire ça ne doit pas être un gros problème pour la sécurité de les accepter, je pense. Je me trompe ?
 
WRInaute occasionnel
psychoreflex a dit:
Donc concrètement, dans un md5(), que peux-t'on trouver ? que des lettres et des chiffres ? Et les lettres, peuvent-elles être en majuscule ?

tout peut etre hashé par du md5 mais le md5 sort une chaine de 32bytes de long.
La chaine peut soit etre pris tel quelle et dans ce cas elle peut etre composée des 256 possible combinaisons que permettent un bytes.
Soit le byte peut etre affiché sous sa forme hexadecimale (c'est ce que renvois md5() ) et dans ce cas on sort:
0123456789abcdef
avec les lettres en minuscules.
Le plus simple pour te permettre de voir un exemple

est de faire quelque chose comme
<?
echo md5('V')
?>
et de voir quel type de caracteres ca affiche.

je suis sur à 100% de ma reponse.
 
WRInaute accro
Normal tout est dans la documentation sur le md5.
J'ai mis le lien ci-dessus, avec une citation directe de la doc..
Je met le reste alors...

md5 calcule le MD5 de la chaîne de caractères str en utilisant l'algorithme RSA Data Security, Inc. MD5 Message-Digest Algorithm, et retourne le résultat. Le résultat est un nombre de 32 caractères hexadécimaux.
 
WRInaute impliqué
J'ai fait ça : ereg('^[a-fA-F0-9]+$', $inscription)

Je crois pas que les majuscules soient utiles mais bon.


J'ai pas essayé avec preg_match, vous sauriez l'écrire ?
 
WRInaute passionné
Vouloir appliquer un masque de contrôle à un hash MD5, c'est peu orthodoxe comme algo de contrôle, non ?

Ya un truc qui m'échappe, là.

L'objectif d'un hash MD5 ( perso je préfère SHA1 ), c'est de faire matcher deux clés qui ont été généré à partir du même algo pour contrôler qu'il n'y a pas eu tentative de corruption.

J'ai tout faux là ?
 
WRInaute impliqué
J'ignore si tu as tout faux, sans doute que non.



je fixe un masque sur le md5() pour m'assurer que la valeur de la variable dans le lien de confirmation n'a pas été trafiquée.
 
WRInaute passionné
Grosso modo, voilà comment je fait pour une validation par MD5 :

Code:
$secret_key="Voici une chaîne une peu compliqué que je suis le seul à connaître, cette chaîne va correspondre à une clé privée. Je ne voudrais pas que n'importe qui puisse venir corrompre le MD5 de mon url. Je rajoute donc des grains de sel dans mon hash histoire de compliqué le travail d'éventuel hacker. Bien sur, ta chaine peut-être un plus courte. "

$md5_in_the_database = MD5( $secret_key . $email );
J'ai pris l'email pour créer le MD5, mais tu prend le champ que tu veux.

dans ton url :

?email=monemail@monemail.com&md5=leMD5_de_ta_DB

Dans ta requête de contrôle tu matche :
- l'email
- et le MD5

pas de regexp, et c'est plus ou moins secure
 
WRInaute impliqué
ça me parait bien, oui.

Mais si le gars bidouille le lien de confirmation et t'envoies un truc du genre :

?email=la-requete-sql-qui-tue


En fait à réception du lien de confirmation, tu le matches et le transformes en md5(), c'est ça ? Donc toute requête est détruite ça revient au même à priori. Maintenant si dans le lien de confirmation, le gars t'envoie un script qui flingue l'instruction de matchage ? (désolé pour Molière)

Personnellement, je préfère controler et filtrer toute donnée avant de faire quoi que ce soit avec.
Mais peut-être suis-je à coté de la plaque ?
 
WRInaute passionné
J'ai commencé mon post par : grosso modo.

Plus en détail, au niveau de la réception :

Code:
if ( $md5_in_the_url == MD5( $email_in_the_url . $secret_key ) {
  // Je peux continuer le MD5 est sécure
  // L'email est sécure
  // a priori c'est Ok
  // rien ne t'empeche de rajouter des regexp, ici. pour encore + de sécurité.
} else {
    // Je stoppe là.
 }
 
WRInaute impliqué
Ah ok, donc tu controles quand même la forme des données que l'on envoit.

Bon de toute façon si tout le monde utilise la même technique, ça va vite devenir cadeau pour les loosers. Hacker plutot.
 
Discussions similaires
Haut