begin process at 2010 09 09 10:13:42
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Sécurité & Cryptage

 > SECURITE ANTI PIRATAGE ENVOI DE MOT DE PASSE CRYPTE SANS SSL

SECURITE ANTI PIRATAGE ENVOI DE MOT DE PASSE CRYPTE SANS SSL


 Information sur la source

Note :
8,67 / 10 - par 9 personnes
8,67 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Sécurité & Cryptage Niveau :Débutant Date de création :06/06/2004 Date de mise à jour :06/06/2004 14:10:02 Vu / téléchargé :12 216 / 519

Auteur : kalachnikov

Ecrire un message privé
Site perso
Commentaire sur cette source (23)
Ajouter un commentaire et/ou une note

 Description

Si le serveur web sur lequel vous vous connectez n'est pas sécurisé(c est souvent le cas, sinon l'url commence par https ou lieu de http). Toutes les données envoyées passent en clair sur le réseau. Faites le test, invitez vos amis(ou ennemis) a un réseau local connecté à un routeur internet, utilisez un sniffer(logiciel pour voir tous les paquets qui passent sur le réseau) avant qu'ils se logguent sur leur site web préféré, et vous aurez leur mot de passe !
Pour les webmasters c est un problème, surtout si leur hébergeur ne propose pas SSL.
Voici un script avec un petit algorithme de hachage fait maison(vous pouvez utilisez md5 mais le javascript a inclure sera très long et il faut que la norme RFC de la fonction md5 côté client et serveur soit la meme).
Ce script permet de faire transiter un haché du mot de passe concaténé avec un préfix qui varie selon la date,
ainsi le haché envoyé ne sera jamais le même.

Source

  • //M2K.JS
  • //la fonction de hachage côté client
  • function m2k_c(i,s,sl)
  • {
  • d=new Array(64);
  • e=s.charCodeAt(i);
  • t=353+e+sl;
  • t=(t%2==0)?t+33:t;
  • u=33+i;
  • for(n=0;n<64;n++) d[n]=t%(n+u);
  • return d;
  • }
  • function m2k(s)
  • {
  • k=new Array(32);
  • c=new Array(32);
  • sl=s.length;
  • s=s+s.substr(0,1);
  • a=m2k_c(0,s,sl);
  • for(n=0;n<32;n++) k[n]=0;
  • for(i=0;i<sl;i++)
  • {
  • b=m2k_c(i+1,s,sl);
  • for(n=0;n<32;n++)
  • {
  • c[n]=a[n]*b[(n+i+32)%32+32];
  • k[n]+=c[n];
  • }
  • a=b;
  • }
  • var h='';
  • for(n=0;n<32;n++) h+=(k[n]%16).toString(16);
  • return h;
  • }
  • //M2K.PHP
  • //la fonction de hachage côté serveur(doit être la même que côté client)
  • <?
  • function m2k_c($i,$s,$sl)
  • {
  • $e=ord(substr($s,$i,1));
  • $t=353+$e+$sl;
  • $t=($t%2==0)?$t+33:$t;
  • $u=33+$i;
  • for($n=0;$n<64;$n++) $d[$n]=$t%($n+$u);
  • return $d;
  • }
  • function m2k($s)
  • {
  • $sl=strlen($s);
  • $s=$s.substr($s,0,1);
  • $a=m2k_c(0,$s,$sl);
  • for($i=0;$i<$sl;$i++)
  • {
  • $b=m2k_c($i+1,$s,$sl);
  • for($n=0;$n<32;$n++)
  • {
  • $c[$n]=$a[$n]*$b[($n+$i+32)%32+32];
  • $k[$n]+=$c[$n];
  • }
  • $a=$b;
  • }
  • for($n=0;$n<32;$n++) $h.=dechex($k[$n]%16);
  • return $h;
  • }
  • ?>
  • //INDEX.PHP
  • //la page qui contient le formulaire pour taper le log et le passe qui sera envoyé haché
  • <?
  • //en tete commune
  • ?>
  • <html>
  • <center>
  • <?
  • //si un login a été envoyé
  • if(isset($login))
  • {
  • //ici le mot de passe c est admin, j ai pas exigé de login car ca sert a rien pour la demo
  • //sinon c est ici que vous choppez votre mot de passe apres avoir intérogé une base de donnée
  • $sqlpassword="admin";
  • //on inclue le script php qui contient la meme fonction de hachage que le javascript de la premiere page
  • include("m2k.php");
  • //on encode le préfixe et le mot de passe, comme la premiere page l a fait en javascript(voir en bas)
  • $mpassword=m2k($prefix.$sqlpassword);
  • //on compare les 2 qui doivent etre égaux
  • if($password==$mpassword)
  • {
  • //on affiche un message pour dire que c est bon
  • echo "bonjour $login vous etes parvenu a vous connecter avec succès<br> sans faire circuler votre mot de passe en clair sur le réseau.<br>(Grâce à la méthode get du formulaire qui de passer les variables dans l adresse,<br> vous pouvez vous pouvez constater que password est haché,<br> votre mot de passe ne figure nul part et passe nul part en clair)";
  • //apres il faut gérer ca avec des variables de session
  • //pour les initiés pas de pb, pour les novices allez sur http://www.php.net/manual/fr/
  • //c est un tres bon manuel pour apprendre php.
  • }
  • //si les 2 sont pas egale c est po bon
  • else
  • {
  • //donc on affiche un message aussi
  • echo "ce n est pas le bon mot de passe regardez la source d'index.php";
  • }
  • }
  • else
  • {
  • ?>
  • <!-- on inclue le javascript qui contient l algorithme de hachage-->
  • <script language=javascript src=m2k.js></script>
  • <b>Accès : </b><br>
  • <!--
  • il y a d abord un 'faux' formulaire dans lequel l utilisateur met son log et son pass
  • attention ! ces données ne sont pas envoyés
  • -->
  • <form>
  • Login :<br>
  • <input type=text name=f_name size=17 maxlength=16 id=f_login><br>
  • Passe :<br>
  • <input type=password name=f_password size=17 maxlength=16 id=f_password><br>
  • </form>
  • <!-- le vrai formulaire i je fais expres de mettre une méthode get pour que vous puissiez voir les paramètres dans l url-->
  • <form action=index.php method=get>
  • <!--login et password sont vide il vont etre rempli au moment du clic sur ok -->
  • <input type=hidden name=login value="" id=sf_login>
  • <input type=hidden name=password value="" id=sf_password>
  • <!-- on envoi un préfix qui est le nombre de seconde unix, il servir pour composer le mot de passe haché -->
  • <input type=hidden name=prefix value=<? echo time(); ?> id=sf_prefix>
  • <!--
  • LA ligne LA plus importante
  • Le bouton d envoi du formulaire prend le nom du faux formulaire, le met dans le vrai
  • enfin il colle le préfixe(nombre de seconde unix) et le mot de passe,
  • cette chaine va etre haché grace a la fonction de hachage contenu dans le javascript inclu au dessus
  • le résultat est stocké dans le champ sf_password, le vrai mot de passe crypté en fonction de la date,
  • donc pour un meme mot de passe, on aura toujours un résultat haché différent !
  • -->
  • <input type=submit value="ok" Onclick="getElementById('sf_login').value=getElementById('f_login').value;getElementById('sf_password').value=m2k(getElementById('sf_prefix').value+getElementById('f_password').value);">
  • </form>
  • <?
  • }//fin si pas de login encore rentré
  • //pied commun
  • ?>
  • </center>
  • </html>
//M2K.JS
//la fonction de hachage côté client

function m2k_c(i,s,sl)
{
	d=new Array(64);
	e=s.charCodeAt(i);
	t=353+e+sl;
	t=(t%2==0)?t+33:t;
	u=33+i;
	for(n=0;n<64;n++) d[n]=t%(n+u);
	return d;
}
function m2k(s)
{
	k=new Array(32);
	c=new Array(32);
	sl=s.length;
	s=s+s.substr(0,1);
	a=m2k_c(0,s,sl);
	for(n=0;n<32;n++) k[n]=0;
	for(i=0;i<sl;i++)
	{
		b=m2k_c(i+1,s,sl);
		for(n=0;n<32;n++)
		{
			c[n]=a[n]*b[(n+i+32)%32+32];
			k[n]+=c[n];
		}
		a=b;
	}
	var h='';
	for(n=0;n<32;n++) h+=(k[n]%16).toString(16);
	return h;
}



//M2K.PHP
//la fonction de hachage côté serveur(doit être la même que côté client)

<?
function m2k_c($i,$s,$sl)
{
	$e=ord(substr($s,$i,1));
	$t=353+$e+$sl;
	$t=($t%2==0)?$t+33:$t;
	$u=33+$i;
	for($n=0;$n<64;$n++) $d[$n]=$t%($n+$u);
	return $d;
}

function m2k($s)
{
	$sl=strlen($s);
	$s=$s.substr($s,0,1);
	$a=m2k_c(0,$s,$sl);
	for($i=0;$i<$sl;$i++)
	{
		$b=m2k_c($i+1,$s,$sl);
		for($n=0;$n<32;$n++)
		{
			$c[$n]=$a[$n]*$b[($n+$i+32)%32+32];
			$k[$n]+=$c[$n];
		}
		$a=$b;
	}
	for($n=0;$n<32;$n++) $h.=dechex($k[$n]%16);
	return $h;
}
?>



//INDEX.PHP
//la page qui contient le formulaire pour taper le log et le passe qui sera envoyé haché

<?
//en tete commune
?>
<html>
<center>
<?

//si un login a été envoyé
if(isset($login))
{
	//ici le mot de passe c est admin, j ai pas exigé de login car ca sert a rien pour la demo
	//sinon c est ici que vous choppez votre mot de passe apres avoir intérogé une base de donnée
	$sqlpassword="admin";
	//on inclue le script php qui contient la meme fonction de hachage que le javascript de la premiere page
	include("m2k.php");
	//on encode le préfixe et le mot de passe, comme la premiere page l a fait en javascript(voir en bas)
	$mpassword=m2k($prefix.$sqlpassword);
	//on compare les 2 qui doivent etre égaux
	if($password==$mpassword)
	{
		//on affiche un message pour dire que c est bon
		echo "bonjour $login vous etes parvenu a vous connecter avec succès<br> sans faire circuler votre mot de passe en clair sur le réseau.<br>(Grâce à la méthode get du formulaire qui de passer les variables dans l adresse,<br> vous pouvez vous pouvez constater que password est haché,<br> votre mot de passe ne figure nul part et passe nul part en clair)";
		//apres il faut gérer ca avec des variables de session
		//pour les initiés pas de pb, pour les novices allez sur http://www.php.net/manual/fr/
		//c est un tres bon manuel pour apprendre php.
	}
	//si les 2 sont pas egale c est po bon
	else
	{
		//donc on affiche un message aussi
		echo "ce n est pas le bon mot de passe regardez la source d'index.php";
	}
}
else
{
?>
<!-- on inclue le javascript qui contient l algorithme de hachage-->
<script language=javascript src=m2k.js></script>

<b>Accès : </b><br>

<!--
il y a d abord un 'faux' formulaire dans lequel l utilisateur met son log et son pass
attention !  ces données ne sont pas envoyés
-->
<form>
Login :<br>
<input type=text name=f_name size=17 maxlength=16 id=f_login><br>
Passe :<br>
<input type=password name=f_password size=17 maxlength=16 id=f_password><br>
</form>

<!-- le vrai formulaire i je fais expres de mettre une méthode get pour que vous puissiez voir les paramètres dans l url-->
<form action=index.php method=get>
<!--login et password sont vide il vont etre rempli au moment du clic sur ok -->
<input type=hidden name=login value="" id=sf_login>
<input type=hidden name=password value="" id=sf_password>
<!-- on envoi un préfix qui est le nombre de seconde unix, il servir pour composer le mot de passe haché -->
<input type=hidden name=prefix value=<? echo time(); ?> id=sf_prefix>

<!--
LA ligne LA plus importante
Le bouton d envoi du formulaire prend le nom du faux formulaire, le met dans le vrai
enfin il colle le préfixe(nombre de seconde unix) et le mot de passe,
cette chaine va etre haché grace a la fonction de hachage contenu dans le javascript inclu au dessus
le résultat est stocké dans le champ sf_password, le vrai mot de passe crypté en fonction de la date,
donc pour un meme mot de passe, on aura toujours un résultat haché différent !
-->
<input type=submit value="ok" Onclick="getElementById('sf_login').value=getElementById('f_login').value;getElementById('sf_password').value=m2k(getElementById('sf_prefix').value+getElementById('f_password').value);">

</form>
<?
}//fin si pas de login encore rentré

//pied commun
?>
</center>
</html>

 Conclusion

Ceci est ma première contribution,
c'était histoire d'envoyer une contribution :)
j'espère qu'elle est pas trop naz :)

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources de la même categorie

CLASSE DE CHIFFREMENT DE DONNÉS AVEC MCRYPT par TychoBrahe
FONCTION DE NETTOYAGE DE VARIABLES AVEC UNE INSTALLATION DE ... par jroger
ALGORITHME DE CÉSAR SUR LA TABLE ASCII par Nementon
Source avec une capture CODEC D'OBFUSCATION DE LIEN HTML (PHP5) par masternico
GÉRER UN .HTPASSWD par coockiesch

Commentaires et avis

Commentaire de Nebraska le 14/06/2004 10:50:45

C'est pas mal, je trouve; g pas testé mais je vais probablement tenter un de ces 4; un défaut par contre; ça fournit une petite sécurité en hachant le mdp envoyé, mais j'éspère que ton algo est dur a casser puisque tu met la partie qui d'encodage visible dans le fichier .js

Commentaire de sKanD le 14/06/2004 18:16:04

Bah à la rigueur : une solution simple pour pallier au problème consiste à mettre l'extension .php au fichier javascript et il sera plus visible côté client.

Commentaire de Nebraska le 14/06/2004 18:40:11

si, si...
si tu met php, ce sera du code interprété coté serveur, donc tu ne pourras pas l'utiliser coté client, et donc pas encoder ton texte.
J'ai pas tout lu(la flemme, sans doute) mais il me semble que dans le code php(coté serveur) on peut décoder le texte assez simplement, donc ça doit ètre un algo symétrique; l'idéal serait avec cette méthode d'utiliser un algorithme assymétrique qui ne fait que coder les données : coté client on encode, et coté serveur on stocke la chaine codé, et on ne compare que les chaines codé.
La difficulté vient que trouver un algorithme assymétrique est assez cho quand mème

Commentaire de kalachnikov le 15/06/2004 10:14:26

l algo est bien assymétrique puisqu il s agit d un hachage

login : perso
prenons un gars qui a un mot de passe : toto
le serveur lui envoie le prefixe (nombres de seecondes depuis 1/1/1970) : 1087294154
tu fais le hachage côté client.
m2k(prefixe+passe) - &gt; m2k("1087294154toto") -&gt; 061041eb1b23a366fd0cc33540813f16

le serveur recoit
login : perso
prefix : 1087294154
haché : 061041eb1b23a366fd0cc33540813f16

le serveur fait un requete genre sélectionne moi le mot de passe de perso.
donc il trouve toto(dans la base, donc tout se passe côté serveur, il n y a pas de transfert du mot de passe en clair).
le serveur fait la meme chose que le client, c est a dire il va haché le prefix et le passe.
m2k(prefixe+passe) - &gt; m2k("1087294154toto") -&gt; 061041eb1b23a366fd0cc33540813f16

si les 2 hachés correspondent, alors le loging est bon sinon c est que c est pas le bon passe.

Commentaire de Nebraska le 15/06/2004 11:57:00

apparement je me suis mal exprimé; en gros une clé assymétrique utilise un algorithme différent pour le codage et le décodage; avec l'exemple du système rsa tu a une clé publique et une clé privé; tu envoie la clé publique au client qui code les données(ici le mot de passe par exemple), mais il est impossible de décoder ces données sans la clé privée qui elle ne sort jamais du serveur.

Ici, si un hacker potentiel s'amuse a récupérer la page qui arrive et les données renvoyées ensuite, il peut décoder le pass renvoyé il me semble

Commentaire de kalachnikov le 15/06/2004 13:36:20

un haché se décode pas,
ca marche que dans un sens,
le hachage permet de générer une clé de longueur fixe à partir d une chaine de longueur variable.
donc impossible de retrouver quoique ce soit avec un haché,
le seul moyen est le brute force.

voici quelques exemples de ce que m2k donne :

\0(caractère nul)-&gt; 84ee50c22c06951d43a90f6df13579b0
h -&gt; 9af8a3d7856bff771c0e689abcdef062
i -&gt; 29cf93af8f7ed0c22c06789ab4a1076d
j -&gt; 183a4f5b154733bb3a2406907e5c3648
k -&gt; 01e39f03a3bcd2e8ca24b2907a01ab45
kk -&gt; 9a6a582e033bd047e87a1c368ace2056
kkk -&gt; c4ad007c4a99ac541cccba994ff496be
kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk -&gt; 7961c27716b886cb306f2de9e917eb81
kkkkkkkkkkkkkkkkkklkkkkkkkkkkkkkkkkkkkk -&gt; a3114ca54a7cf813360be9337bdde549
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK -&gt; 1aff80eb6a0318ec0d4580ddfa974019
lllllllllllllllllllllllllllllllllllllll -&gt; a0fdb09662d5b8e8302c7dee4be72f76
sain -&gt; 92d9192dfec47e0b148aa6b4ebedd9df
sein -&gt; d2d1d925f68cb68f904e6a78e76dd55b
sain dans une chaine un peu plus longue -&gt; 3dbdb5231765f46c0cd7086534659a04
sein dans une chaine un peu plus longue -&gt; 77b9b5641f2d34ee689bcc2930e99680


dans tous les cas c est loin de valoir un md5,
d une part mon algo est 32 fois plus lent.
d autres part le but d un haché est que la clé subisse une extreme variation meme si on change qu un seul caractère dans une chaine très longue.
Or on commence a voir des collisions sur les 2 derniers exemples.
Mon code a juste l avantage d etre concis.

Commentaire de Nebraska le 15/06/2004 18:30:16

&lt;sort de son univers fait d'xp et de ligne de code pour réapprendre à lire&gt;

bon, dsl, mais n'importe quoi... je dit n'importe quoi :p
j'ai relu plus attentivement et c'est vrai que nul part le hash n'est 'déhashé' (je connait pas le voca dsl); quand j'ai lu le code vite fait je croyais que tu décodais le pass reçu par le serveur pour le comparer avec la bdd mais non, en fait ça code le pass contenu dans la bdd selon le timecode utilisé pour coder le pass envoyé par l'utilisateur.... aaaaaah ok :)

Bon, je change de commentaire alors :
L'idée d'envoyer un timecode pour l'ajouter au codage des données est intéressante, et mème si ton algo n'est pas aussi performant qu'un md5 comme tu dit, c'est une très bonne base pour sécurisé un site (a propos : md5 inclus dans php et sur le site javascript de codes-sources en cherchant un peu j'ai trouvé une implémentation de md5 pour javascript, y'a surement moyen de s'en servir mais comme a mon habitude j'ai pas testé, je sais pas a quelle vitesse elle tourne :p)

Commentaire de kalachnikov le 16/06/2004 22:41:27

effectivment le but est plus de montrer le principe,
qu un algo de hachage merdique :)
(j ai volontairement fait un truc concis pour
mettre le code source sur la page web,
que ce soit pas trop long a lire,
et pour mettre en evidence qu il faut la meme fonction de hachage côté clien et serveur).
m2k j ai pas passé assez de temps dessus,
je pense qu il me faudrait un mois pour qu il soit aussi bien que md5.

pour ceux qui veulent un md5 en javascript :
http://developpeur.journaldunet.com/tutoriel/sec/010828sec_cryptohachage.shtml

en fait je croyais que c etait long,
mais jpense qu en virant les commentaires, ca le fait.

j ai pas testé, faudrait voir si ca donne les memes resultats côté serveur,
car pour php y a juste a taper md5("tachaine'); ...

au pire si c est pas le meme,
faut juste faire un portage des lignes en javascript en php.

Commentaire de Nebraska le 17/06/2004 01:22:11

ça donne les mèmes résultats, testé :) un algo c'est un algo, il ne devrait pas varier d'une implémentation à une autre :)
D'ailleurs, je me suis inspiré du principe pour faire la gestion de la partie admin d'un site, sauf que pour moi le serveur n'envoie pas de timecode, c'est le javascript qui se contente de rajouter la date du jour avant de passer au md5, et php de son coté fait pareil : date+pass dans le md5 et compare, le système marche nickel :p
Merci pour cette source finalement très intéressante a mon avis :)

Commentaire de kalachnikov le 17/06/2004 14:11:13

pour le timecode, ca peut se générer côté client comme tu l as expliqué,
d ailleurs je pense que c est meme mieux
comme ca il n y a qu un seul paquet reso qui contient ce timecode.

Sinon merci pour celui qui a mis 10/10 :)

Commentaire de Kevin007 le 08/07/2004 23:16:11

Salut, Kalachnikov
Je pourrais avoir ton aide stp ?
Je suis dispo sur MSN :
KevinChalet@hotmail.com
Merci
A+

Commentaire de lorcan1980 le 23/02/2005 12:40:11

Bravo pour le code!

Néanmoins, j'ai une remarque à faire pour ceux qui désirent se baser sur ce tuto : si vous n'avez pas configuré votre PHP pour accepter les variables globales, ce code ne fonctionnera pas. Mais il suffit alors de remplacer les $login par $_GET("login"), etc ;-)

Merci encore à kalachnikov :-)

Commentaire de Kevin007 le 23/02/2005 14:17:20

Salut lorcan,
Ce n'est pas $_GET("login") mais $_GET[ 'login' ] ;)
A+

Commentaire de grandvizir le 09/04/2005 12:06:03

Comment s'assurer par la théorie que ton hashage génère des clés uniques ? Sinon, ça ne tient pas debout. Ca retarde, c'est tout.

Commentaire de rabiex le 21/05/2005 00:05:38

salut je suis nauvou et j'ai pérdu les tps de mon réspteur (golden inter star)(gameone.multivision....)et j'ai un cable de flach mai je ne sai pas comment flaché alord aider moi plz je serai ravie de votre répense.

Commentaire de grandvizir le 21/05/2005 09:46:03

La solution est d'utiliser le MD5 côté client avec le fichier JS proposé dans les commentaires. Je viens d'implémenter ça dans un de mes prochains codes qui ressemble à cela:

<script src="md5.js"></script>
<form method="post" action="page.php" name="requester" ENCTYPE="multipart/form-data">
  <br> Pseudo: <input type="text" name="user" maxlength="50">
  <br> PWD:    <input type="password" name="pwd" maxlength="32">
  <br>         <input type="submit" name="submit" value="Connexion" onClick="javascript:document.requester.pwd.value=calcMD5(document.requester.pwd.value);">
</form>

Sauf que si l'utilisateur dit "NON" à l'alerte que le navigateur affiche, alors l'utilisateur devra retaper son mot de passe. Mais on peut alors rajouter un code JS qui fait afficher un message en rouge.

Commentaire de grosteack le 02/05/2006 16:21:42

sympa mais si j'ai bien compris, tu envoies en Post la date ainsi que le hash non ? Si on sniff, on récupère bien tout ce qu'il faut et si un hacker renvoit exactement le même paquet HTTP, quelle est la sécurité qui le jettera ?

Commentaire de kalachnikov le 03/05/2006 15:56:18

c'est clair,
il faut faire un controle sur le prefixe, genre interdiction d'utiliser le meme prefixe une fois que l'authenfication a réussi.

Commentaire de endlersman le 09/06/2007 09:21:27

bonjour

bonne idée que cette histoire de préfixe, en améliorant un chouilla ton script on doit pouvoir sécuriser correctement l'identification

puisque le préfixe dépend de la date, si par exemple on prends comme précision la minute, ça ne laisse qu'une minute au hackeur pour sévir
si en plus de ça on mémorise les préfixes utilisé, pendant par exemple plus d'une minute, le hackeur ne pourra pas se logger
mais il faut alors que le préfixe dépende aussi du login, sinon personne ne peut se logger pendant une minute...

de plus apparemment dans ton script au dessus les identifiants sont stockés en clair, le mieux est donc un double cryptage : stockage en crypté, ajout d'un préfixe à cet id crypté puis cryptage de l'ensemble
coté client c'est pareil on crypte une fois, on ajoute le préfixe et on recrypte avant d'envoyer

vous en pensez quoi ?

Commentaire de kalachnikov le 11/06/2007 10:45:34

Le timestamp servant a générer le préfixe n'est qu'un exemple de génération aléatoire.
Le préfixe ne dépend pas de la date.
Le code doit être amélioré sur 2 points.

1 / l'interdiction d'utiliser 2 fois le même préfixe.

2 / il n y a pas de précision sur les numéros de sessions, une fois identifié il faut regenerer un nouveau id de session (session_regenerate() il me semble. Ceci afin d'éviter que le pseudo hacker utilise le numero de session qui a servi a l'authentification.

Commentaire de kalachnikov le 11/06/2007 10:50:47

3 ème point / concernant le stockage en clair, il faudrait également penser a vider les champs f_login et f_password avant la soumission du formulaire (en jscript genre document.getElementById('f_password').value = '';)

Commentaire de stephswin le 25/06/2007 00:28:39

Bonsoir,

pour l'unicité de l'utilisation du préfixe, l suffit de le stocker dans le profil de l'utilisateur et de vérifier à la connexion suivante que le préfixe est différent.

Ce qui me pose davantage problème, c'est que, sauf erreur de ma part, ce système ne permet pas aux utlisateurs de choisir eux mêmes et de modifier leur mot de passe puisqu'il n'est pas décodé avant stockage.

Le système de hashage n'est pas adpaté dès lors qu'on offre ce genre de fonctionnalités ?

Commentaire de kertimanoff le 20/08/2010 16:58:11

c'est une solution d'utiliser js pour hacher le passwd coté client afin qu'il ne transite pas clairement sur le réseau, mais un pirate aguéri enregistrera ta page de connexion sur son pc, modifira le JS pour qu'il ne hach rien du tout, il mettra l'url compléte de la page a poster dans l'action du formulaire.
et en suite il n'aura qu'a entré le hash dans le champs password et ça marchera parfaitement.

disont que t'a source est un premier filtre pour les pirate du dimanche, mais c'est quand même tout a fait vulnérable.

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Septembre 2010
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
27282930   

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,468 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales