使用防伪令牌来防止在MVC 3中使用jQuery-3.2.1进行CSRF攻击

时间:2017-06-13 13:14:09

标签: javascript jquery asp.net-mvc

    function GetRequestVerificationToken() {
    var token = $('input[name=""__RequestVerificationToken""]').val();
    var headers = {};
    headers['__RequestVerificationToken'] = token;
    return headers;
}

我有上面的GetRequestVerificationToken()函数,我在使用jquery-1.7.2的asp.net MVC 3应用程序中的Ajax调用中使用过。

升级到jquery-3.2.1后,我收到以下错误:

  

未捕获错误:语法错误,无法识别的表达式:input [name =“”__ RequestVerificationToken“”]       在Function.Sizzle.error(jquery-3.2.1.js?v = 2017_1:1580)       在Sizzle.tokenize(jquery-3.2.1.js?v = 2017_1:2232)       在Sizzle.select(jquery-3.2.1.js?v = 2017_1:2659)       在Function.Sizzle [as find](jquery-3.2.1.js?v = 2017_1:884)       在jQuery.fn.init.find(jquery-3.2.1.js?v = 2017_1:2922)       在jQuery.fn.init(jquery-3.2.1.js?v = 2017_1:3032)       在jQuery(jquery-3.2.1.js?v = 2017_1:98)       at GetRequestVerificationToken(Common.js?v = 2017_1:265)       at setCalender(Report.js?v = 2017_1:81)       在HTMLDocument。 ((指数):967)

任何人都知道我需要做出哪些语法更改?

以下是我的示例用法脚本

$.ajax({
            async: true,
            cache: false,
            data: { startDate: sdate, endDate: edate },
            headers: GetRequestVerificationToken(),
            type: 'POST',
            url: '/' + virtualDirectory + '/Test/List',
            success: function (data) {
                $("#DivAction").html(data);
                TableSorter('audit');
                HideLoader();
            },
            error: function (msg) {
                alert("err in Audit Trail Search");
                HideLoader();
            }

2 个答案:

答案 0 :(得分:0)

更改此

$('input[name=""__RequestVerificationToken""]')

到此:

$('input[name="__RequestVerificationToken"]')

您需要的所有信息都会显示在错误消息中。

答案 1 :(得分:0)

重新解决问题的是重写我的GetRequestVerificationToken函数,如下所示。

function GetRequestVerificationToken() {
//var token = $('input[name=""__RequestVerificationToken""]').val();
var token = $('[name=__RequestVerificationToken]').val();
var headers = {};
headers['__RequestVerificationToken'] = token;
return headers;

}