jquery - 如何保护我的 JsonResult GET 调用?

标签 jquery asp.net-mvc csrf

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

编辑:

今天我尝试使用 AntiForgeryToken 来处理 Ajax 请求,效果很好。只需使用以下 JavaScript:

$.post('my_url',  $.getAntiForgeryTokenString(), function() { ... });

$.getAntiForgeryTokenString = function() {
    return $(document.getElementsByName("__RequestVerificationToken")).fieldSerialize();
};

在服务器端,您不必更改代码 - 只需使用 ValidateAntiForgeryToken- 属性进行操作即可。

希望这有帮助

关于jquery - 如何保护我的 JsonResult GET 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/554650/

相关文章:

asp.net - 使用同站cookie属性防止CSRF

jquery - Rails 3.1 - CSRF 被忽略?

javascript - jquery函数不触发

javascript - 使 <select> 字段成为必填项?

javascript - 垂直排序 div A-Z 中的子元素

asp.net-mvc - ASP MVC : Getting confused when implementing ASP MVC Security

c# - MVC : actions that don't exist

javascript - Jquery - 单击时缩小 DIV

javascript - JSTree 搜索与 Ajax 调用/延迟加载

forms - 如何防止从本地主机向服务器提交表单