程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了jQuery Ajax调用和Html.AntiForgeryToken()大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决jQuery Ajax调用和Html.AntiForgeryToken()?

开发过程中遇到jQuery Ajax调用和Html.AntiForgeryToken()的问题如何解决?下面主要结合日常开发的经验,给出你关于jQuery Ajax调用和Html.AntiForgeryToken()的解决方法建议,希望对你解决jQuery Ajax调用和Html.AntiForgeryToken()有所启发或帮助;

我使用这样的简单Js函数

AddAntiForgeryToken = function(data) {
    data.__requestVerificationToken = $('#__AJAXAntiForgeryForm input[name=__requestVerificationToken]').val();
    return data;
};

由于页面上的每个表单都将具有相同的令牌值,因此只需将这样的内容放入最顶层的母版页中

<%-- used for AJAX in AddAntiForgeryToken() --%>
<form ID="__AJAXAntiForgeryForm" action="#" method="post"><%= HTMl.AntiForgeryToken()%></form>

然后在您的AJAX调用中执行(已编辑,以匹配您的第二个示例)

$.AJAX({
    type: "post",
    dataType: "HTML",
    url: $(this).attr("rel"),
    data: AddAntiForgeryToken({ ID: parseInt($(this).attr("title")) }),
    success: function (responsE) {
        // ....
    }
});

解决方法

我已经在互联网上的一些博客文章中阅读了相关信息,并在自己的应用中实施了缓解CSRF攻击的措施。这些帖子尤其是我实施的驱动力

  • 来自ASP.NET和Web工具开发人员内容团队的ASP.NET MVC最佳实践
  • Phil Haack博客的跨站点请求伪造攻击剖析
  • ASP.NET MVC框架中的AntiForgeryToken- David Hayden博客的Html.AntiForgeryToken和ValidateAntiForgeryToken属性

基本上,这些文章和建议都说,为防止CSRF攻击,任何人都应实施以下代码:

1)[ValidateAntiForgeryToken]在接受POST http动词的每个动作上添加

[httpPost]
[ValidateAntiForgeryToken]
public ActionResult SomeAction( SomeModel model ) {
}

2)在<%= Html.AntiForgeryToken() %>将数据提交到服务器的表单内添加帮助程序

<div style="text-align:right; padding: 8px;">
    <%= Html.AntiForgeryToken() %>
    <input type="submit" id="btnSave" value="Save" />
</div>

无论如何,在我的应用程序的某些部分中,我都使用jQuery将Ajax
POST进行到服务器,而没有任何形式。例如,在发生这种情况时,我让用户单击图像来执行特定操作。

假设我有一个包含活动列表的表。我在表的列上有一幅图像,上面写着“将活动标记为已完成”,当用户单击该活动时,我正在执行Ajax POST,如以下示例所示:

$("a.markAsDone").click(function (event) {
    event.preventDefault();
    $.ajax({
        type: "post",dataType: "html",url: $(this).attr("rel"),data: {},success: function (responsE) {
            // ....
        }
    });
});

<%= Html.AntiForgeryToken() %>在这些情况下如何使用?我是否应该在Ajax调用的data参数中包括Helper调用?

对不起,很长的帖子,非常感谢您的帮助

编辑

按照ayrdub的回答,我已经用下面的方式

$("a.markAsDone").click(function (event) {
    event.preventDefault();
    $.ajax({
        type: "post",data: {
            AddAntiForgeryToken({}),id: parseInt($(this).attr("title"))
        },success: function (responsE) {
            // ....
        }
    });
});

大佬总结

以上是大佬教程为你收集整理的jQuery Ajax调用和Html.AntiForgeryToken()全部内容,希望文章能够帮你解决jQuery Ajax调用和Html.AntiForgeryToken()所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。