[英]Prevent CSRF in Web Forms using Ajax and Web Api in the server side
我有一個需要避免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剃刀調用,因此在我的情況下無法使用它。 有沒有一種方法可以在不使用ASP.NET MVC的情況下使用javascript / jquery獲取此防偽令牌?
我找到了一個簡單的解決方案:
在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
}
}
});
希望對其他遇到此問題的人有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.