我需要在我的代碼(asp.net)中實現CSRF(跨站點請求僞造)衛士。 雖然我從OWASP獲得了一個庫,但由於沒有給出文檔,實施它是一件痛苦的事情。有人能給我一個更簡單的方法來實現.net中的csrf guard,或者正確配置OWASP庫嗎?如何在ASP.Net中實現CSRF衛士
感謝
-Chandan
我需要在我的代碼(asp.net)中實現CSRF(跨站點請求僞造)衛士。 雖然我從OWASP獲得了一個庫,但由於沒有給出文檔,實施它是一件痛苦的事情。有人能給我一個更簡單的方法來實現.net中的csrf guard,或者正確配置OWASP庫嗎?如何在ASP.Net中實現CSRF衛士
感謝
-Chandan
ASP.NET MVC
如果你使用asp.net的MVC,你可以使用防僞標記。基本上,在你看來,你會放置以下代碼:
@Html.AntiForgeryToken()
而且您的控制器上,你會把這個屬性在控制器的頂部:
[ValidateAntiForgeryToken]
public ActionResult Foo()
{
// Foo code
}
這樣做是確保用戶不能從遠程站點提交表單,因爲它們無法生成令牌。你也可以用鹽創建一個標記。
ASP.NET的WebForms
對於asp.net Web表單可以重寫OnInit方法和ViewStateUserKey設置爲會話ID。 Web表單將通過MAC檢查來驗證視圖狀態,從而起到反僞造令牌的作用。由於攻擊者無法生成有效的視圖狀態(因爲他們無法生成有效的MAC,因爲他們無法將會話ID置於視圖狀態中),MAC將失敗。您必須在每個頁面上執行此操作,或創建一個已覆蓋oninit的基類並執行此操作。
public partial class Default : System.Web.UI.Page
{
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
this.ViewStateUserKey = Session.SessionID;
}
}
如果我不使用MVC,我該如何防止CSRF? – user1663380 2013-09-10 08:42:53
您是否探索過使用本機ASP.NET CSRF保護的可能性?如果您的應用程序不通過查詢字符串處理輸入,則可以使用ViewStateUserKey來防止CSRF攻擊。對於HTTP POST請求,ViewStateUserKey保護工作得很好。 – gauravphoenix 2011-12-27 21:11:55