2012-01-03 9 views
1

Souvent, lorsque je travaille sur des applications AJAX, je passe des paramètres via POST. Certaines parties de l'application peuvent envoyer le même nombre de paramètres ou le même ensemble de données, mais en fonction d'un paramètre personnalisé que je passe, il peut faire quelque chose de complètement différent (comme supprimer au lieu d'insérer ou mettre à jour). Lors de l'envoi des données, je vais souvent faire quelque chose comme ceci:Manipulation POST, données de sécurité et problèmes de sécurité AJAX

$.post("somepage.php", {action: "complete", somedata: data, moredata: anotherdata}, function(data, status) { 
    if(status == "success") { 
     //do something 
    } 
}); 

Sur une autre partie de l'application, je pourrais avoir un code similaire, mais la mise en place de la propriété d'action pour deny ou quelque chose application spécifique qui au lieu de déclencher le code à supprimer ou déplacer des données du côté serveur.

J'ai entendu parler des outils qui vous permettent de modifier les requêtes POST et les données qui leur sont associées, mais je n'ai utilisé qu'un seul outil appelé Tamper Data for Firefox. Je sais que les chances de quelqu'un de modifier les données d'une demande POST est mince et encore plus mince pour eux de changer une propriété clé pour que l'application fasse quelque chose de différent sur le backend (comme changer action: "complete" en action: "deny"), mais je suis sûr se produit dans les attaques quotidiennes sur les applications Web. Quelqu'un peut-il suggérer de bons moyens d'éviter ce genre de falsification? J'ai pensé à quelques moyens qui consistent à vérifier si l'action est fausse pour l'événement déclenché et à valider cela avec tout le reste, mais je peux voir qu'il y a 100 lignes de code supplémentaires pour chaque partie de l'application qui a besoin avoir ce genre de demandes protégées.

Répondre

2

Vous devez autoriser les clients effectuant l'appel AJAX comme vous le feriez avec des demandes normales. Tant que l'utilisateur a le droit de faire ce qu'il essaie de faire, il ne devrait pas y avoir de problème. Vous devez également transmettre un jeton d'authentification que vous stockez dans la session des utilisateurs, à protect against CSRF.

0

Votre serveur ne peut pas faire confiance à tout ce qu'il reçoit du client. Vous pouvez commencer à établir la confiance en utilisant des sessions et l'authentification (assurez-vous que l'utilisateur est ce qu'elle dit être), SSL/TLS (empêcher la falsification du réseau) et la protection XSRF (assurez-vous que l'action a été exécutée depuis html) ainsi que d'empêcher l'injection XSS (assurez-vous de contrôler la façon dont votre code HTML est généré). Toutes ces choses peuvent être gérées par un framework côté serveur de bonne qualité, mais il y a encore beaucoup de façons de gâcher. Donc, vous devriez probablement prendre des mesures pour vous assurer que l'utilisateur ne peut rien faire de trop destructeur pour l'une ou l'autre partie.