簡體   English   中英

為什么CSRF從OWASP前10名中刪除,如何防止ASP.NET mvc上的CSRF?

[英]why CSRF is removed from OWASP top 10, how to prevent CSRF on ASP.NET mvc?

目前HP強化掃描我們的ASP.NET MVC代碼並向我展示一些CSRF問題

我嘗試搜索有關OWASP的一些信息,並發現CSRF已經從OWASP TOP 10中刪除,其原因是"More frameworks offering secure-by-default settings and some form of protections"

那么,ASP.NET MVC對CSRF的保護是什么?

如果我們不在Controller上添加[ValidateAntiForgeryToken]屬性,這是否意味着,控制器仍然容易受到CSRF攻擊?

以ASP.Net MVC為例,平台上的CSRF保護過去需要兩件事:一個必須包含在每個表單中的防偽標記(即: @Html.AntiForgeryToken() )和一個[ValidateAntiForgeryToken]屬性裝飾控制器對這些表單的操作。 這兩項與現在在所有主流瀏覽器中都處於活動狀態的同站點cookie策略相結合,通常可以緩解CSRF。 但是,這些是開發人員需要采取的積極行動。 如果不這樣做,通常會導致易受攻擊的形式,而尚未遇到CSRF的新開發人員可能不知道要查找它們。

我沒有方便的文檔或公告,但IIRC他們在最新版本的MVC中更改了@Html.Form()方法,因此它現在將自動包含令牌。 他們還添加了一個新的[AutoValidateAntiForgeryToken]屬性,它跳過安全的http動作(GET,HEAD等),但檢查不安全的http動作(POST!)上的令牌。 然后,他們更新了Visual Studio為新項目生成的腳手架,以包含一個過濾器,用於為您的操作添加新屬性。 如果由於某種原因您有一個不應該檢查令牌的操作,那么您還可以使用新的[IgnoreAntiforgeryToken]屬性來覆蓋過濾器創建的行為。

添加新操作的現有項目仍然需要記住使用舊屬性,但是新項目 - 即使是那些不了解更好的開發人員 - 也將在所有正確的位置擁有所有正確的東西。 如果你真的想用腳射擊自己,可以編寫手動<form>元素,在生成腳手架后刪除過濾器,或者添加不好的“忽略”屬性。 但是,典型的新開發人員甚至不需要再考慮這個新項目了......當然,假設您使用的是最新的MVC版本。

請記住,其他平台已添加或正在為開箱即用的行為添加類似或等效的保護,並且很清楚為什么這不再是“前10名”:主要平台的默認行為已經安全從這次襲擊。 它仍然記錄在OWASP中,並且實際的威脅並沒有減少......但是現在你不再容易受到攻擊。 你必須盡力避免這個問題。 並不是這不再是一個問題,而是外部xml實體或日志記錄不足等其他項目現在被視為更大的威脅,因此已將其替換為前10名列表。

這也突出了你真正應該使用@Html助手的一個原因......它們使你的html代碼可以輕松地與最新的最佳實踐保持@Html ,只要應用程序繼續獲得最小的維護。

ASP.NET包含Antiforgery包,可用於保護您的應用程序免受CSRF攻擊。 請參閱MS Docs

與OWASP一樣,除了ASP.NET之外,許多框架都提供了預防,我們只需要應用這些安全庫。 例如, OAuth 2.0提供狀態參數以防止CSRF。

如果客戶端請求中包含狀態參數,則響應中應顯示相同的值。 對於應用程序來說,在使用響應之前驗證請求和響應中的狀態值是否相同是一種很好的做法。

作為開發人員,我們只需要使用這些身份驗證庫和中間件來直接實現OAuth 2.0,例如Azure Active Directory身份驗證JS庫( ADAL )和.NET中間件

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM