4 votes

Question sur la sécurité AJAX, veuillez vous renseigner

J'ai un réseau social que je suis en train de créer et j'ai une question de sécurité. J'ai la possibilité d'avoir des amis sur le site web et lorsque vous demandez un ami, ce serait un bouton qui exécuterait un script avec AJAX en utilisant jQuery.

Je sais que javascript peut être facilement piraté et j'ai aussi lu ici http://www.acunetix.com/websitesecurity/ajax.htm qu'AJAX n'est pas aussi sûr qu'il n'y paraît. Ils affirment que "puisque les requêtes HTTP XML fonctionnent en utilisant le même protocole que tout le reste du web (HTTP), techniquement parlant, les applications web basées sur AJAX sont vulnérables aux mêmes méthodologies de piratage que les applications "normales"".

En gros, je ne veux pas qu'un ver continue à lancer des demandes d'amis via ma fonction AJAX, que quelqu'un se connecte au site et qu'il ait 14 millions de demandes d'amis. C'est également un problème avec plusieurs autres AJAX scripts que j'exécute sur le site. La question que je me pose est de savoir si je dois tout garder côté serveur. J'utilise php, donc chaque demande d'ami devrait être un rechargement de la page, même si je voudrais éviter une telle chose. Toute aide serait grandement appréciée.

5voto

Jamie Treworgy Points 13495

Si vous avez des problèmes de sécurité, ils ne sont pas propres à ajax, mais il existe des moyens simples de rendre les choses plus difficiles à manipuler.

1) Comme le dit Diodeus - ne laissez absolument pas les gens utiliser vos services sans qu'ils soient authentifiés via une session. C'est la même chose que pour n'importe quelle autre page d'un site web qui nécessite que vous soyez connecté.

2) Rendre le détournement de session plus difficile en intégrant des informations sur le client dans la clé de session (cookie) et en les vérifiant sur le serveur, par exemple l'adresse IP, la version du navigateur. Ces informations peuvent toujours être usurpées, cependant.

3) Si une session particulière fait plus de x demandes dans une certaine période de temps (par exemple 10 en une minute), déconnectez-la et bannissez-la pendant une heure. Fixez une limite plus élevée pour les bannir jusqu'à ce qu'ils soient restaurés par un administrateur. Faites en sorte que le code vous envoie un e-mail à chaque fois que cela se produit afin que vous sachiez si vous avez un problème.

4) Si vous êtes vraiment inquiet, utilisez le SSL. C'est vraiment le seul moyen d'empêcher absolument le détournement de session (à part la mise en œuvre de votre propre mécanisme de cryptage à clé privée pour les données de session).

5) Si vous n'utilisez pas le protocole SSL, vous ne pouvez pas empêcher le détournement de session, mais vous pouvez protéger les mots de passe de vos utilisateurs contre l'espionnage. Lors de l'authentification, faites ceci :

  • Le client script demande le sel au serveur (une chaîne aléatoire).
  • Le serveur envoie le sel au client et le garde en mémoire avec la session.
  • Le client hash le mot de passe en utilisant Sha-256 par exemple, avec le sel, et s'authentifie avec son nom d'utilisateur et son mot de passe haché. Le serveur hache le mot de passe associé à l'utilisateur de son côté en utilisant le même sel, et s'authentifie s'il correspond au hachage envoyé par le client. Le serveur oublie le sel qu'il a utilisé cette fois-ci.

De cette façon, une personne qui observe une session ne peut voir que le mot de passe haché et, comme le hachage est différent à chaque fois, elle ne peut pas se reconnecter en utilisant ce hachage contre votre service. Vous ne pouvez toujours pas les empêcher de détourner la session, mais vous pouvez les empêcher de voir les mots de passe de vos utilisateurs ou de se connecter par eux-mêmes.

En réalité, le détournement de session n'est pas si courant, bien que la mise en œuvre la plus connue soit, bien sûr, facebook via wifi. Si quelqu'un propose un plugin Firefox pour pirater votre réseau social, vous devriez être ravi car vous savez que vous avez réussi.

1voto

Aistina Points 6720

Ce ne sont pas des problèmes spécifiques à AJAX. Il s'agit simplement de vérifier et d'assainir vos données. Je suppose que les utilisateurs doivent s'inscrire ou se connecter avant de pouvoir ajouter des amis (après tout, comment faire autrement pour savoir qui est ami avec qui ?):

  • Ajoutez un CAPTCHA ou un élément similaire à votre processus d'inscription pour réduire le nombre de robots. reCAPTCHA semble être le standard de l'industrie de nos jours (et est très facile à mettre en place).
  • Lors du traitement d'un appel AJAX, assurez-vous que l'utilisateur est autorisé à faire ce qu'il fait (c'est-à-dire qu'il est connecté, qu'il a activé son compte, etc.)
  • Lorsque vous traitez une demande d'ami, ignorez les doublons. Les gens ont parfois tendance à ignorer volontairement les demandes d'amis, et ils n'ont probablement pas envie de recevoir à nouveau l'invitation lorsque l'invité s'impatiente.
  • Trouvez un moyen de garder une trace des comportements suspects. Si un utilisateur a envoyé 50 demandes d'amis au cours des deux dernières secondes, il est probable qu'il s'agisse d'un robot. Bloquez temporairement le compte et demandez à un humain de le vérifier. Il peut également être judicieux de masquer les demandes d'amis des utilisateurs bloqués.

Il y en a bien d'autres, mais ceux-ci devraient vous permettre de commencer.

0voto

Diodeus Points 67946

Définir un cookie de connexion sur le client. Envoyez la valeur du cookie avec la requête ajax et validez-la sur le serveur.

0voto

david Points 3830

Je ne suis pas sûr de bien comprendre, car si un ver ou autre soumet des requêtes AJAX, pourquoi ce même ver ne pourrait-il pas faire des requêtes non-ajax ?

Dans tous les cas, vous devez absolument prévoir une validation côté serveur pour vous assurer que la requête est valide. La validation du nombre de demandes d'amis qui peuvent être faites est indépendante de l'utilisation d'ajax.

-1voto

Vagrant Points 1259

L'AJAX n'existe pas vraiment. Le terme AJAX est une description générale d'une façon d'organiser les choses. Une requête dite "AJAX" est simplement un GET ou un PUT HTTP.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X