Salut à tous,
je programme en php depuis que je suis tout petit et je suis en train de bosser sur l'interactivité avec les utilisateurs via l'AJAX. J'ai vu moultes scripts javascript/php permettant de reconnaitre des users par login/pwd sans devoir rafraichire la page
le hic : ces scripts sont hackable sans aucun problème. il suffit de faire une boucle javascript et de soumettre tous les mots de passes possibles et imaginables pour un login à la page PHP de test et de collecter le résultat pour trouver lequel est correct. typiquement, voici un code qui le permet sans aucun problème :
var loginAtester="";
while (true){
// tant que le résultat du précédent login n'est pas arrivé, on attend
while(XHR!=null && loginAtester!=""){
setTimeout(true,5);
}
XHR=getXMLHTTP(); // fonction qui crée un XHR
if(XHR)
{
try{
// on fait appel à la page php qui permet de tester le login
XHR.open("GET","http:/www.monsite.com/testLogin.php?id="+loginAtester,true);
XHR.onreadystatechange=function() {
if(XHR.readyState==4 && XHR.status == 200) {
// si le mot de passe est bon on l'affiche
if (XHR.responseText="bon mot de passe")
alert(loginAtester+"est le bon login");
// on réinitialise le XHR
XHR=null;
}
}
// envoi de la requête
XHR.send(null);
nextLogin(); // on passe au login suivant à tester
}catch(exc)
{
alert(exc);
}
}
}
on voit donc bien que depuis nimporte quel ordinateur connecté à internet, il est possible de lancer ce type de boucle qui va tester tous les possibilités (ici tous les logins possibles).
Une solution est de intégrer un compteur d'essai pour chaque login dans la base de donnée, et de renvoyer d'office "mauvais login" quand on a dépassé un certain nombre d'essai ... mais je trouve cette méthode barbare. N'y a t-il pas une solution pour tester la provenance de l'appel ?
d'avance merci pour vos réponses
Raf
Configuration: Windows XP
Internet Explorer 7.0