Problème de sécurité entre AJAX et PHP

Fermé
ajaxPowaa Messages postés 6 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 24 janvier 2008 - 24 janv. 2008 à 20:56
ajaxPowaa Messages postés 6 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 24 janvier 2008 - 24 janv. 2008 à 21:29
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
A voir également:

2 réponses

Profil bloqué
24 janv. 2008 à 21:05
Bonjour, le plus sur moyen pour éviter le hacking, c'est de désactiver le JS pour les utilisateurs.
-1
ajaxPowaa Messages postés 6 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 24 janvier 2008
24 janv. 2008 à 21:11
le problème ne se situe pas au niveau du client.
ce que je veux, c'est être certain que chaque fois que ma page php est appelée, c'est à partir du site en question, et non pas à partir d'une page de hacking que nimporte qui (qui active javascript sur son navigateur) peut écrire ... la preuve, c'est ce que j'ai fais dans mon premier message
0
Viendrais tu de réinventer l'attaque par force brute ?
-1
ajaxPowaa Messages postés 6 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 24 janvier 2008
24 janv. 2008 à 21:29
je viens juste de me rendre compte que par l'AJAX ce genre d'attaque est facilitée puisqu'il ne faut plus avoir accès au serveur directement pour écrire ces attaques, mais que c'est le serveur qui vient à l'utilisateur pour lui donner les info

c'est un concept que j'ai du mal à accepter ... je me demande comment les sites pro font pour parer à ce problème.
sur daylimotion par exemple (pour ne pas le citer), le formulaire de login est en ajax 100% ... quid de la fiabilité du système ?
0