J'ai mis en œuvre dans mon application les mesures d'atténuation des attaques CSRF suivant les informations que j'ai lu sur certains post de blog autour de l'internet. En particulier, ces postes ont été le pilote de ma mise en œuvre
- Les meilleures Pratiques pour ASP.NET MVC, à partir de la ASP.NET et Outils Web Developer Équipe de Contenu
- Anatomie d'un " Cross-site Request Forgery Attaque de Phil Haack blog
- AntiForgeryToken dans le ASP.NET Framework MVC - Html.AntiForgeryToken et ValidateAntiForgeryToken Attribut de David Hayden blog
Fondamentalement, ces recommandations et des articles de dit que, pour prévenir l'attaque CSRF tout le monde devrait mettre en œuvre le code suivant:
1) Ajouter l' [ValidateAntiForgeryToken]
sur chaque action que d'accepter le POSTE verbe Http
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult SomeAction( SomeModel model ) {
}
2) Ajouter l' <%= Html.AntiForgeryToken() %>
helper à l'intérieur de formes qui envoie des données au serveur
<div style="text-align:right; padding: 8px;">
<%= Html.AntiForgeryToken() %>
<input type="submit" id="btnSave" value="Save" />
</div>
De toute façon, dans certaines parties de mon application que je suis en train de faire de l'Ajax Postes avec jQuery pour le serveur sans avoir n'importe quelle forme à tous. C'est le cas par exemple où je suis, permettant à l'utilisateur de cliquer sur une image pour en faire une action spécifique.
Supposons que j'ai une table avec une liste d'activités. J'ai une image dans une colonne de la table qui dit que "la Marque de l'activité comme terminée" et lorsque l'utilisateur clique sur une activité que je suis en train de faire de l'Ajax POST comme dans l'exemple suivant:
$("a.markAsDone").click(function (event) {
event.preventDefault();
$.ajax({
type: "post",
dataType: "html",
url: $(this).attr("rel"),
data: {},
success: function (response) {
// ....
}
});
});
Comment puis-je utiliser l' <%= Html.AntiForgeryToken() %>
dans ces cas? Dois-je inclure l'aide d'appels à l'intérieur du paramètre de données de l'appel Ajax?
Désolé pour le long post et merci beaucoup de votre aide
EDIT:
Comme par jayrdub réponse que j'ai utilisé de la façon suivante
$("a.markAsDone").click(function (event) {
event.preventDefault();
$.ajax({
type: "post",
dataType: "html",
url: $(this).attr("rel"),
data: {
AddAntiForgeryToken({}),
id: parseInt($(this).attr("title"))
},
success: function (response) {
// ....
}
});
});