我知道如何使用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-属性即可。

希望这可以帮助

09-17 23:36