簡體   English   中英

C#中的XSS攻擊預防

[英]XSS Attack prevention in C#

我有一個由 MVC 項目使用的 Web API 項目。 MVC 項目有相當數量的用戶輸入,這些輸入在網頁上顯示為輸出。

現在,我想保護我的網站免受 XSS 攻擊。 我已經閱讀了 Microsoft 的 AntiXss 庫、輸入驗證、輸出過濾等。但我的問題是,如何將其應用到我的項目中。 在哪里放置輸入驗證,如何過濾我的輸出,我如何清理用戶數據,在將數據發送到 API 之前,我是否還需要清理 API 中的數據或僅清理 MVC 中的數據,如果是,那么如何,在哪里在 MVC 或 Web API 中使用 AntiXss 庫,以及如何使用等。

答案取決於用戶輸入如何准確地進入瀏覽器中的頁面 DOM。

如果 MVC 應用程序生成 cshtml 頁面(使用 Razor),您需要在那里實現輸出編碼,在 cshtml 文件中。 請注意,AntiXSS 作為單獨的庫現在已棄用,默認情況下它現在位於System.Web.Security.AntiXss命名空間中。 您需要根據寫入的上下文對所有輸出進行編碼(最重要的是,您需要對在 Javascript 上下文中編寫的任何輸入進行編碼,無論是script標簽、事件屬性(如onclickhref的第一個字符對於a標簽,等)。 對於純 html 輸出(標簽之間的文本),Razor 默認已經提供了 html 編碼,因此只需執行<div>@myVar</div>

如果您的前端使用 JSON API 之類的東西,那么您可能擁有某種客戶端模板引擎(Knockout 等)。 在這種情況下,使用 application/json 內容類型將來自用戶的數據發送回客戶端是相當安全的(這實際上非常重要)。 然后,您必須仔細選擇綁定方法,以始終將用戶輸入作為文本而不是 html 綁定到頁面元素。 這實際上意味着使用 Knockout 的text綁定而不是html或使用 jQuery 的.text()方法而不是.html()等。

請注意,有關 XSS 預防的完整教程比此處的答案要長得多,因此該答案僅突出了一些高級內容以及應該這樣做以防止 XSS 的一般方法。

暫無
暫無

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

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