我有一个网站,我需要避免CSRF攻击。我研究了很多时间,所有示例都在客户端使用这样的函数
@functions{
public string TokenHeaderValue()
{
string cookieToken, formToken;
AntiForgery.GetTokens(null, out cookieToken, out formToken);
return cookieToken + ":" + formToken;
}
}
在像这样的 ajax 调用之后:
$.ajax("api/values", {
type: "post",
contentType: "application/json",
data: { }, // JSON data goes here
dataType: "json",
headers: {
'RequestVerificationToken': '@TokenHeaderValue()'
}
});
显然,第一个代码是MVC剃刀调用,所以我不能在我的情况下使用它。有没有办法在不使用MVC的情况下使用javascript/jquery获得这个防伪令牌 ASP.NET?
我找到了一个简单的解决方案:
在 aspx 或 ascx 文件中,放置一个隐藏字段,如下所示:
<input type="hidden" id="hdnAntiForgeryTokens" runat="server" value=""/>
在 C# 端,创建如下所示的属性:
protected string AntiForgeryTokens
{
get
{
string cookieToken, formToken;
AntiForgery.GetTokens(null, out cookieToken, out formToken);
return cookieToken + ":" + formToken;
}
}
并在Page_Load事件中为其赋值:
hdnAntiForgeryTokens.Value = AntiForgeryTokens;
之后,使用 jquery 读取值:
$.ajax({
type: "POST",
url: //your web api url,
data: getJason(),
contentType: "application/json; charset=utf-8",
dataType: "json",
headers: {
'RequestVerificationToken': $('#hdnAntiForgeryTokens').val()
},
statusCode: {
200: function _() {
//success handling
},
500: function (){
//error handling
}
}
});
我希望它对遇到此问题的其他人有所帮助。