2011-12-14 78 views
1

我需要在我的代碼(asp.net)中實現CSRF(跨站點請求僞造)衛士。 雖然我從OWASP獲得了一個庫,但由於沒有給出文檔,實施它是一件痛苦的事情。有人能給我一個更簡單的方法來實現.net中的csrf guard,或者正確配置OWASP庫嗎?如何在ASP.Net中實現CSRF衛士

感謝

-Chandan

+1

您是否探索過使用本機ASP.NET CSRF保護的可能性?如果您的應用程序不通過查詢字符串處理輸入,則可以使用ViewStateUserKey來防止CSRF攻擊。對於HTTP POST請求,ViewStateUserKey保護工作得很好。 – gauravphoenix 2011-12-27 21:11:55

回答

0

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; 
    } 
} 
+0

如果我不使用MVC,我該如何防止CSRF? – user1663380 2013-09-10 08:42:53