Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'lwest'@'172.20.245.59' (using password: YES) in /mnt/115/sda/7/1/lwest/include/adm/stat.php3 on line 16

Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /mnt/115/sda/7/1/lwest/include/adm/stat.php3 on line 18

Cryptage MD5 Client

Téléchargement

	securepass.zip

	Contenu
	- securepass.js, la librairie javascript assurant le cryptage
	- userlogon.html, exemple de mise en oeuvre sur un formulaire d'authentication
	- userauthent.php, squelette de code PHP de vérification
	- index_fr.html, documentation en français
	- index_en.html, documentation en anglais

Présentation

	Ce script propose une solution simple de cryptage de champs de formulaire côté client.

	Il permet d'encrypter un champ de formulaire HTML, afin qu'il soit transmis encrypté sur le réseau.

	L'utilisation privilégié est l'encryptage de mot de passe.
	On peut cependant l'appliquer à n'importe quelle donnée ne nécessitant pas d'être décrypter coté serveur, MD5 etant non réversible.

	Pour sécuriser le transfert des données, un développeur web doit utiliser HTTPS (HTTP + SSL).
	Or HTTPS n'est pas toujours disponible, et possède quelques inconvénients : charge du serveur, traffic et temps de reponse plus importants que le simple HTTP.

Spécifications

__
Format de cryptageMD5
TechniqueCryptage coté client
LanguageJavascript
Compatibilitétesté sur NS6, Mozilla5, IE5+
Version0.2
ContactLeo West, lwest@free.fr
	Netscape 4 interdit l'écriture via javascript des champs password.
	Par conséquent le mot de passe non crypté clair est donc egalement transmis...
	Work-around: utiliser un champ texte pour le mot de passe.

Limitations

Brute force

	Un quidam écoutant le réseau peut utiliser des outils type crack sur le mot de passe crypté pour
	retrouver le mot de passe en clair. Workaround: utiliser des mots de passe résistants.

Sequence Replay

	Ce système n'empêche en rien la technique dite "de sequence replay": Un hacker à l'écoute du
	traffic récupère le couple login,password crypté)  et rejoue la requête HTTP "telle quelle".

	Note: Il existe des techniques pour empecher le replay. Je ne les esposent pas ici car
	elles sont assez complexes pour faire l'objet d'une doc a part entière.

Documentation

encrypt()

	Fonction  javascript assurant :

	- le cryptage d'un champ
	- le stockage de la valeur crypté dans un deuxième champ
	- l'effacement du champ en clair

Syntaxe

	encrypt( widClear, widCrypted )

	widClear est le champ contenant la donnée à crypter.
	widCrypted est le champ receptacle de la donnée encrypté, généralement un champ caché.

	Note: Ces paramètres ne sont pas les valeurs des champs, mais les champs eux-mêmes.

Exemple

	encrypt( document.forms[0].temp, document.forms[0].motdepasse );

Exemples

Formulaire

	<html>
	<head>
		<script language="javascript" src="securepass.js"></script>
	</head>
	<body>
	<form method="post" action="userlogon.php" onSubmit="encrypt(this.dummy,this.userpassword)">
	Login:
		<input name="userlogin" type="text"><br>
	Password:
		<input type="password" name="dummy"><br>
		<input type="hidden" name="userpassword" value="">

	<input value="&gt; Login" type="submit">
	</form>
	</body>
	</html>

Traitement côté serveur

	Voici un squelette de code PHP assurant le traitement du formulaire ci-dessus

	$realpassword contient le vrai mot de passe non crypté, récupéré dans le référentiel:
	base de donnée, annuaire, fichier plat ...

	On crypte ce mot de passe en MD5, puis on compare les versions cryptées
	afin d'autoriser ou non l'accès.

	if( $userpassword == "" ) {

		die( "Error: no password provided" );

	} else {

		$local_pass = md5( $realpassword );

		if( $local_pass == $HTTP_POST_VARS[userpassword] )
			echo "Authent Successfull";
		else
			die( "Authent failed" );
	}


Generated on Wed, 06 34 2000 14:34:03 by RFC Engine Processor - © 1998-2000 Leo West