Bonjour,
Je tente de savoir si mon script est assez sécurisé pour protéger l'accès à un site avec un code en JavaScript.
Si le code est bon, alors on accède à la bonne page par ce principe :
window.location.href = mdp + ".htm"
Voilà le résultat donné de la fonction quand j'y tape mon mot de passe :
875
Sauriez-vous retrouver mon mot de passe ? Est-ce assez sécurisé ?
Voilà la fonction checksum :
function checksum(mdp)
{
var ok = 0, lg = mdp.length, checksum = 0, bl = "", pr = 0;
var tab = "3IRsJwGFz!2@oiS}1APDBtf{W)kX08n6xeQcbVC9LlUNvy.m?rOaEh5u#dqKMgjYH7Zp4T$";
var tab2 = "KQ4uPsl3CEi6NaDowxJLX95tm0FhAb7qcVYZkHM2zdUgO1TGeRnyWBSvj8Iprf";
for(var i=0;i<lg;i++)
{
for(var y=0;y<71;y++)
{
if(mdp[i]==tab[y])
{
pr += y + i + lg;
y = 71;
}
}
}
while(pr>50)pr-=50;
var t = pr;
while(pr>0)
{
tab2 = (pr%3==1) ? " " + tab2 : tab2;
pr--;
}
tab2 = " " + tab2;
for(var i=0;i<lg;i++)
{
for(var y=0;y<71;y++)
{
if(mdp[i]==tab2[y])
{
checksum += t*i + y/t + ((y%2==0) ? y/2 : 1);
checksum *= (y%3==0) ? 1.3 : 1.23;
checksum += y + t + lg - i;
checksum *= (y%4==1) ? 1.63 : 1.78;
checksum += t/(y+1) - i*lg + 62.3;
checksum *= (i+t+lg+y)%2==0 ? 1.38 : 1.52;
while(checksum>10209)checksum-=10209;
y = 71;
}
}
}
checksum += (lg+t)*i + ((t*lg%5==0) ? 5.6 : 4.2);
checksum = parseInt(checksum);
if(checksum<0)checksum=-checksum;
while(checksum>2419)checksum-=2419;
return checksum;
}
Je pense pas que sécuriser un site avec du js soit une bonne idée.
Avec les mots de passes lbbq0sli, a9se8ssj, eayqk22, le checksum renvoie "875". Si c'est ce simple nombre qui détermine si le mot de passe est correct ou non, ça ne me semble pas très viable comme solution. Typiquement, toute sécurité faite en javascript est à éviter
function ChaineAleatoire(nbcar)
{
var ListeCar = new Array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","0","1","2","3","4","5","6","7","8","9");
var Chaine ='';
for(i = 0; i < nbcar; i++)
{
Chaine = Chaine + ListeCar[Math.floor(Math.random()*ListeCar.length)];
}
return Chaine;
}
do {
mdp = ChaineAleatoire(8);
result = checksum(mdp);
} while (result != 875);
alert(mdp);Tu noteras que ça ne tient qu'en quelques lignes.
Le 21 mars 2015 à 14:28:46 [notch] a écrit :
Je pense pas que sécuriser un site avec du js soit une bonne idée.
Je pense que c'est néanmoins possible.
Le 21 mars 2015 à 14:33:49 Chocolayte a écrit :
Avec les mots de passes lbbq0sli, a9se8ssj, eayqk22, le checksum renvoie "875". Si c'est ce simple nombre qui détermine si le mot de passe est correct ou non, ça ne me semble pas très viable comme solution. Typiquement, toute sécurité faite en javascript est à éviter
Non, il y a une redirection en fonction du mot de passe entré par l'utilisateur sur la bonne page.
Ainsi s'il a entré une collision, il tombera sur la page 404 NOT FOUND
Le 21 mars 2015 à 14:34:57 Chocolayte a écrit :
function ChaineAleatoire(nbcar) { var ListeCar = new Array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","0","1","2","3","4","5","6","7","8","9"); var Chaine =''; for(i = 0; i < nbcar; i++) { Chaine = Chaine + ListeCar[Math.floor(Math.random()*ListeCar.length)]; } return Chaine; } do { mdp = ChaineAleatoire(8); result = checksum(mdp); } while (result != 875); alert(mdp);Tu noteras que ça ne tient qu'en quelques lignes.
Si le mdp entré est une collision, alors l'utilisateur sera redirigé sur la page 404 not found puisque la page se nomme avec le vrai mot de passe.
Le 21 mars 2015 à 14:52:28 bluepoint_ a écrit :
Arrrgl Arrrgl .
Bon déjà :if(checksum<0)checksum=-checksum; while(checksum>2419)checksum-=2419;L'espace des valeurs possible de la somme de contrôle ne contient que 2400 valeurs, donc à la louche, on doit obtenir une collision avec en moyenne même pas 100 valeurs de mot de passe, et encore en supposant que ton truc possède de bonnes propriétés. Trouver un antécédent de 875 est à peine plus difficile.
Ensuite, on ne fait pas ce genre de vérification coté client, toujours coté serveur !
Et surtout, surtout ON N'ECRIT JAMAIS SOIT MEME UNE PRIMITIVE CRYPTOGRAPHIQUE.
Boudiou.
Non car seul le vrai et unique mot de passe permet de faire passer l'utilisateur.
En effet, si le mot de passe trouvé est une collision, alors la personne sera redirigée vers une page inexistante (puisque le script redirige vers la page mdp_user + ".htm")
et donc une erreur 404 NOT FOUND !
Donc seul le vrai mot de passe donnera accès à la page.
Le 21 mars 2015 à 14:52:28 bluepoint_ a écrit :
Arrrgl Arrrgl .
Bon déjà :if(checksum<0)checksum=-checksum; while(checksum>2419)checksum-=2419;Non, il y a une redirection en fonction du mot de passe entré par l'utilisateur sur la bonne page.
Ainsi s'il a entré une collision, il tombera sur la page 404 NOT FOUND
Ben dans ces cas là ta somme de contrôle est juste une aide pour l'attaquant,
au lieu de faire du bruteforce sur les liens tonsite/mdp
Il fait la même chose en essayant que les antécédents de 875.
Mouais mais le mot de passe est très difficile à trouver tu sais ![]()
Le 21 mars 2015 à 14:58:36 bluepoint_ a écrit :
Non, il y a une redirection en fonction du mot de passe entré par l'utilisateur sur la bonne page.
Ainsi s'il a entré une collision, il tombera sur la page 404 NOT FOUND
Ben oui mais dans ce cas ta somme de contrôle sert juste à aider l'attaquant
Sans la somme de contrôle:
-Attaque par force brute sur les liens /tonsite/mdp
Avec la somme de contrôle
-Même attaque mais avec les antécédents de 875En fait tu aides le pirate.
![]()
Le 21 mars 2015 à 14:58:36 bluepoint_ a écrit :
Non, il y a une redirection en fonction du mot de passe entré par l'utilisateur sur la bonne page.
Ainsi s'il a entré une collision, il tombera sur la page 404 NOT FOUND
Ben oui mais dans ce cas ta somme de contrôle sert juste à aider l'attaquant
Sans la somme de contrôle:
-Attaque par force brute sur les liens /tonsite/mdp
Avec la somme de contrôle
-Même attaque mais avec les antécédents de 875En fait tu aides le pirate.
Donc faut virer ta somme de contrôle
En plus ça veut dire que si le pirate intercepte la connexion entre toi et ton site il obtient direct le mot de passe
Alors comment je protège avec du JS ?
Le 21 mars 2015 à 15:04:11 bluepoint_ a écrit :
Tu le fais pas, le JS est coté client donc coté attaquant, donc il a pleine connaissance de ce qui s'y passe.
Ta sécurité doit se trouver coté serveur et au niveau de la connexion entre le client et le serveur
Un hash sha256 suffit alors ?
Le 21 mars 2015 à 15:10:34 bluepoint_ a écrit :
Le 21 mars 2015 à 15:05:52 Igyro a écrit :
Le 21 mars 2015 à 15:04:11 bluepoint_ a écrit :
Tu le fais pas, le JS est coté client donc coté attaquant, donc il a pleine connaissance de ce qui s'y passe.
Ta sécurité doit se trouver coté serveur et au niveau de la connexion entre le client et le serveurUn hash sha256 suffit alors ?
Coté SERVEUR oui, c'est un des algorithmes de hachage considérés comme sûrs à l'heure actuelle.
Dans l'idéal, il faudra que tu conserve coté serveur ton mot de passe salé et haché un grand nombre de fois.
Et une connexion sécurisée entre ton serveur et ton client.
Et sans passer le mdp dans l'URL boudiou
comment on fait une connexion sécurisée entre client serveur ?
Le 21 mars 2015 à 15:16:48 bluepoint_ a écrit :
Chais pas moi, en HTTPS par exemple.
Enfin d'une manière générale, pour ce qui est de la sécurité, la règle veut qu'on utilise des solutions qui ont fait leurs preuves plutôt que d'en inventer soi-même
Merci