Accueil > > > 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
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 :)
Sources de la même categorie
Commentaires et avis
|
Derniers Blogs
PARUTION DE MON LIVRE SUR WPF 4PARUTION DE MON LIVRE SUR WPF 4 par odewit
La 2e édition de mon livre sur WPF sort aujourd'hui en version numérique et lundi en version papier :-)
L'ouvrage présente de façon approfondie les fonctionnalités de WPF 4 : graphisme 2D et 3D, animation, multimédia, interfaces utilisateur, databind...
Cliquez pour lire la suite de l'article par odewit EDM : COMMENT UTILISER L'HORIZONTAL ENTITY SPLITTINGEDM : COMMENT UTILISER L'HORIZONTAL ENTITY SPLITTING par Matthieu MEZIL
Une des raisons pour lesquelles j'adore l'Entity Framework est la puissance de son mapping. Beaucoup de développeurs pour ne pas dire la plus part n'en n'ont pas conscience. Pour rappel, j'ai réalisé des videos (en anglais) sur le mapping . Certains scena...
Cliquez pour lire la suite de l'article par Matthieu MEZIL [WP7DEV][REACTIVE] RENDRE LES REACTIVE EXTENSIONS PLUS STABLES[WP7DEV][REACTIVE] RENDRE LES REACTIVE EXTENSIONS PLUS STABLES par jay
Lorsque l'on développe des applications .NET, les exceptions non gérées dans des threads ont le désagréable effet de terminer le processus courant.
Dans l'exemple suivant.......(read more) ...
Cliquez pour lire la suite de l'article par jay WINDBG / SOS / PSSCOR2 : FAILED TO LOAD DATA ACCESS DLL (MSCORDACWKS)WINDBG / SOS / PSSCOR2 : FAILED TO LOAD DATA ACCESS DLL (MSCORDACWKS) par coq
Ceux d'entre nous qui analysent des dumps d'applications .NET (notamment ceux créés via WER après un crash) en dehors de l'environnement initial ont probablement tous été confrontés au moins une fois au message suivant, à la saisie d'une commande SOS ...
Cliquez pour lire la suite de l'article par coq
Logiciels
Microsoft Office (2010)MICROSOFT OFFICE (2010)Microsoft Office 2010 offre de nouveaux moyens flexibles et puissants pour optimiser votre travai... Cliquez pour télécharger Microsoft Office SeaMonkey (2.0.7)SEAMONKEY (2.0.7)Le projet SeaMonkey est issu d'un effort communautaire pour developper une application tout en un... Cliquez pour télécharger SeaMonkey Safari (5.0.2)SAFARI (5.0.2)Le navigateur d'Apple a lui aussi été mis à jour, aussi bien dans sa mouture Windows que celle po... Cliquez pour télécharger Safari Mozilla FireFox (4.0 béta 5)MOZILLA FIREFOX (4.0 BéTA 5)Firefox 4.0 béta 5
L'une des nouveautés visibles les plus attendues réside sans doute dans l'a... Cliquez pour télécharger Mozilla FireFox Mozilla Firefox (3.6.9)MOZILLA FIREFOX (3.6.9)Firefox 3.6.9 corrige les problèmes suivants :
* Introduced support for the X-FRAME-OPTION... Cliquez pour télécharger Mozilla Firefox
|