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


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

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

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

未捕获错误:语法错误,无法识别的表达式:输入[名称="__RequestVerificationToken"] at Function.Sizzle.error (jquery-3.2.1.js?v=2017_1:1580) at Sizzle.tokenize (jquery-3.2.1.js?v=2017_1:2232) at Sizzle.select (jquery-3.2.1.js?v=2017_1:2659) at Function.Sizzle [as find] (jquery-3.2.1.js?v=2017_1:884) at jQuery.fn.init.find (jquery-3.2.1.js?v=2017_1:2922) at jQuery.fn.init (jquery-3.2.1.js?v=2017_1:3032) at 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();
}

更改此设置

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

对此:

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

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

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

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

}

最新更新