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