我知道如何使用MVC的AntiForgeryToken属性以及它的关联HTML帮助程序来帮助XSRF保护我的应用程序的表单POST.
可以为实现GET的JsonResults做类似的事情吗?
例如,我的View包含一个onSubmit jQuery调用,如下所示:
$.getJSON("/allowActivity/YesOrNo/" + someFormValue, "{}", function(data) { if(data.Allow) { //Do something. } });
我想确定这个JsonResult只能从目标页面调用.
编辑:
我发现这个帖子关于一个类似的问题,没有具体的答案.
确保我的GET(非破坏性)URL仅由我自己的页面中的AJAX调用消耗的最简单方法是什么?
您可以将AntiForgeryToken与一些自定义逻辑结合使用.在服务器上创建AntiForgery令牌是相同的,但默认情况下,该值不包含在您的XmlHttpRequest中.
此令牌的值位于仅HTTP的cookie"__RequestVerificationToken"中,并且还应该以发布到服务器的表单数据的形式出现.因此,在XmlHttpRequest中包含一个键/值对,并在控制器上使用ValidateAntiForgeryToken - 属性
编辑:
今天我尝试自己使用AntiForgeryToken进行Ajax请求,它运行正常.只需使用以下javascript:
$.post('my_url', $.getAntiForgeryTokenString(), function() { ... }); $.getAntiForgeryTokenString = function() { return $(document.getElementsByName("__RequestVerificationToken")).fieldSerialize(); };
在服务器端,您不必更改代码 - 只需使用ValidateAntiForgeryToken-属性即可.
希望这可以帮助