2008-09-01 7 views
19

J'utilise jquery ajax pour publier des mises à jour sur mon serveur. Je suis soucieux de m'assurer que j'ai mis en place des mesures appropriées pour que seuls mes appels AJAX puissent publier des données.Conseil de sécurité pour jquery ajax data post?

Ma pile est PHP sur Apache contre un backend MySQL.

Conseil grandement apprécié!

Répondre

27

Toute demande que les appels AJAX dans vos pages peuvent faire peut également être faite par quelqu'un en dehors de l'application. Si cela est fait correctement, vous ne serez pas en mesure de dire si elles ont été faites dans le cadre d'un appel AJAX à partir de votre webapp ou à la main/d'autres moyens.

Je peux penser à deux scénarios dont vous pourriez parler lorsque vous dites que vous voulez vous assurer que seuls vos appels AJAX peuvent publier des données: soit vous ne voulez pas qu'un utilisateur malveillant puisse publier des données cela interfère avec les données d'un autre utilisateur ou vous voulez réellement limiter les messages à être dans le "flux" d'une opération multi-requête. Si vous êtes concerné par le premier cas (quelqu'un envoyant des données malveillantes à/comme un autre utilisateur), la solution est la même, que vous utilisiez AJAX ou pas - il vous suffit d'authentifier l'utilisateur par tous les moyens nécessaires - - généralement via un cookie de session. Si vous êtes concerné par le second cas, alors vous devrez faire quelque chose comme émettre un jeton unique à chaque étape du processus, et stocker le jeton attendu du côté serveur. Ensuite, lorsqu'une requête est faite, vérifiez qu'il existe une entrée correspondante côté serveur pour l'action qui est en cours et que les jetons attendus correspondent et que ce jeton n'a pas encore été utilisé. S'il n'y a pas de réponse, vous rejetez la demande, le cas échéant, puis vous marquez ce jeton comme utilisé et traitez la demande.

Si ce qui vous préoccupe est quelque chose d'autre que l'un de ces deux scénarios alors la réponse dépendra de plus de détails que vous avez fournis.

+2

Le problème avec l'authentification de cookie de session est qu'il n'est pas suffisant pour empêcher les attaques CSRF. C'est une bonne idée de mettre des couches supplémentaires de sécurité - que vous utilisiez ou non ajax. http://en.wikipedia.org/wiki/Csrf –

+0

@JesseHallett, Bonjour, J'utilise Spring Securiy comme couche de sécurité, et je fais des requêtes post-AJAX du côté client. J'ai le jeton CSRF activé donc il y a un partage de jeton de client de serveur à chaque demande, que je passe pendant les demandes de publication AJAX. Ma procédure est-elle suffisamment sécurisée? –

5

Utilisez des sessions pour vous assurer que les messages Ajax sont exécutés dans un contexte authentifié. Pensez à votre code Ajax comme un autre client de votre serveur, il devient plus facile de résoudre les problèmes d'authentification de cette façon.