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
SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc [TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|