推薦使用 Microsoft Anti-Cross Site Scripting Library V3.0

分享到噗浪!

微軟最近推出了 Microsoft Anti-Cross Site Scripting Library V3.0 正式版(RTM),但在國內似乎沒看到許多人提到這套函示庫,就我來觀察有幾點可能的原因:

從 Wikipedia 上的 Cross-site scripting (XSS) 提到 XSS 有三種類型:

  • 非固定式 XSS 攻擊 (Non-persistent)
    1. 這是最常見的攻擊類型,日前好幾次大規模 XSS 攻擊事件都是此類攻擊。
    2. 沒經驗的開發人員最容易遭受此類型的 XSS 攻擊。
    3. 像 Request, Request.Form, Request.QueryString, Request.Cookie, Request.Headers 等等都是常見的攻擊來源。
  • 固定式 XSS 攻擊 (Persistent)
    • 又稱 Stored-XSS 攻擊。
    • 駭客會試圖將「攻擊 XSS 字串」透過各種管道寫入到目標網站的資料庫中,讓瀏覽網站的使用者下載病毒、執行特定指令碼、當成 DDoS 的跳板、…等等。
  • 以 DOM 為基礎的 XSS 攻擊 (DOM-based)
    • 此類型會利用網頁透過 JavaScript 動態顯示資訊到頁面中(透過 DOM 修改內容),但內容並未透過 HtmlEncode 過,導致遭駭客傳入惡意指令碼(JavaScript或VBScript)並讓使用者遭殃,或試圖修改原有網頁中的資訊用以欺騙使用者執行特定動作或進行資訊詐騙。
    • 另一種是透過 Browser 的漏洞將 JavaScript 先寫入本機電腦,然後在透過被 XSS 攻擊過的網頁載入本機 JavaScript 檔案進行本機電腦的攻擊,例如植入病毒或木馬之類的程式。

我們都知道在 ASP.NET 中預設都會阻擋可能會導致 XSS 攻擊的字串,例如 < 或 > 符號。相關資訊可參考:How To: Prevent Cross-Site Scripting in ASP.NETRequest Validation - Preventing Script Attacks,建議每位開發人員都應該閱讀這幾篇文章。

不過若因為專案所需,例如「網站後台」為了內容管理的需求可能就會將這項基本防護功能關閉,這時就有可能會讓你的資料庫被污染,以導致被攻擊的 HTML/Scripting 被輸出到前台網頁上。

有經驗的 ASP.NET 開發人員都知道如何撰寫阻擋 XSS 的程式碼,一個最簡單的也最常見的防護方式就是在頁面輸出變數時都一律加上 HttpUtility.HtmlEncode 方法,但頁面多或開發人員多的時候可就不見得頁面每一個地方都能記得加上,除非你有錢購買靜態程式碼分析軟體定期分析你的 ASP.NET 專案。

從上述得知,你能夠在 ASP.NET 專案中做出的努力都稱為:「黑名單防護策略」,也就是針對特定網頁明確寫程式阻擋 XSS 攻擊,沒寫到的地方就破功了。

而採用 Anti-XSS Library 最大的不同就在於它採用「白名單防護策略」,預設將會以最嚴格的設定預防所有潛在的 XSS 攻擊,只有特定編碼的字元、允許的特殊符號可以允許通過 HTTP 傳輸,任何在設定以外的字元或發現潛在的 XSS 攻擊行為時就會對相關字元進行編碼,例如:HtmlEncode、UrlEncode、LDAP Encode、XPath Encode、… 等。

在安裝的時候預設安裝路徑為:C:\Program Files\Microsoft Information Security\Microsoft Anti-Cross Site Scripting Library v3.0\ ,過程中提供兩個選項讓你安裝:

Microsoft Anti-Cross Site Scripting Library V3.0 -- 預設安裝路徑為:C:\Program Files\Microsoft Information Security\Microsoft Anti-Cross Site Scripting Library v3.0\

分別說明如下:

Anti-Cross Site Scripting Library

  • 這個是一個 .NET 組件,提供一個 Microsoft.Security.Application 命名空間,與一個 AntiXSS 類別,類別中有許多靜態方法方便開發人員在 ASP.NET 專案中直接套用。
  • 內建的方法包括有HtmlEncode, JavaScriptEncode, UrlEncode, VisualBasicScriptEncode, XmlAttributeEncode, XmlEncode 等,每個方法都有一些特殊方法,值得研究一下。
  • 完整的說明請參見 "C:\Program Files\Microsoft Information Security\Microsoft Anti-Cross Site Scripting Library v3.0\Help\Anti-XSS_Library_Help.chm" 說明文件。
  • 這個 Library 也適用於 ASP.NET MVC 類型的專案。

Security Runtime Engine (SRE)

  • SRE 是一個用 .NET 撰寫而成的 HTTP module,可透過 web.config 設定載入 HTTP module 並透過 antixssmodule.config 設定檔的定義(放在應用程式根目錄)即可自動保護整個 ASP.NET 網站。(備註:SRE 較不適用於 ASP.NET MVC 專案
  • 在 C:\Program Files\Microsoft Information Security\Microsoft Anti-Cross Site Scripting Library v3.0\Security Runtime Engine\ConfigGen 目錄下有提供一個 ConfigGen.exe 程式可分析 ASP.NET 發佈的預先編譯網站的 dll 組件,並依據網站內使用的 ASP.NET 控制項進行分析,將一些經常遭受 XSS 攻擊的控制項進行自動防護作業。例如針對 Page.Title 屬性、Label 控制項的 Text 屬性、CheckBox 控制項的 Text 屬性、…等等。
  • 以下是 antixssmodule.config 的設定範例:
<?xml version="1.0" encoding="utf-8"?>

  <Configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  
  <!--This section lists the controls and encoding contexts supported by SRE-->
  <ControlEncodingContexts>
      <ControlEncodingContext FullClassName="System.Web.UI.WebControls.Label" PropertyName="Text" EncodingContext="Html" />
      <ControlEncodingContext FullClassName="System.Web.UI.WebControls.HyperLink" PropertyName="Text" EncodingContext="Html" />
  </ControlEncodingContexts>
  
  <!--This section can be used to configure double encoding support-->
  <DoubleEncodingFilter Enabled="True" />
  
  <!--This section can be used to configure encoding for derived controls-->
  <EncodeDerivedControls Enabled="True" />
  
  <!--This section can be used to configure color coding of the output -->
  <MarkAntiXssOutput Enabled="False" Color="Blue"/>

  <!--This section includes the configuration for suppressing SRE for the listed files and folders-->
  <Suppressions>
      <Exclude Path="/Page_1.aspx" />
      <Exclude Path="/ExcludedDirectory/Page_2.aspx" />
  </Suppressions>

</Configuration>
        

套用 Security Runtime Engine (SRE) HTTP module 會對網站執行效能帶來一些衝擊,不過衝擊並不大,基於安全考量應該可以接受。

在 "C:\Program Files\Microsoft Information Security\Microsoft Anti-Cross Site Scripting Library v3.0\Sample Application" 目錄下有個簡易的範例程式,可以讓你徹底感受這套軟體的威力,在 web.config 裡的 validateRequest 設定為 false 的情況下,也能夠讓你的網站遠離 XSS 攻擊的威脅。

ASP.NET MVC 專案建議可以使用 Anti-Cross Site Scripting Library 搭配先前介紹的 CAT.NET 進行網站安全防護與安全檢測。

相關連結

  

此文章由 will 發表於 2009/7/28 下午 09:19:15

永久連結 | 評論 (8) | 此文章的RSSRSS comment feed |

分類: Security | .Net | ASP.NET | ASP.NET MVC | Web

標籤: , ,

評論

八月 13. 2009 10:46

Carey

HI, wii 您好:看了您的文章對我來說相當的寶貴,不知道是否可轉貼您的文章至小弟的 blog 中,讓我可收藏您的相關大作呢? 我會註明來源及出處的,感謝!!

Carey 台灣

八月 13. 2009 13:06

will

Carey: 可以,但不能全文轉貼。引用後記得再來我這留言,要留下網址喔。

P.S. 我是 Will ,不是 Wii  = =''

will 台灣

八月 13. 2009 15:19

Jerry

Will 大 您好
拜讀你這精彩的文章後,有一個問題想請教你

要在 .net 2008 上使用 AntiXss DLL 時,一定要關閉 ValidateRequest="false" 嗎?因為系統總會攔截在前說使用者輸入的內容有問題。

可有變通的方式?

Jerry 台灣

八月 13. 2009 19:37

will

為了使用 AntiXSS 而設定 ValidateRequest="false" 是本末倒置的作法!

你不需要為了使用 AntiXSS 而將 ValidateRequest 設定為 false,除非你真的需要使用者或管理者透過 Web 輸入 HTML 標籤(Tag)等可能會包含惡意指令的字元。

使用 AntiXSS 是保護你的 ASP.NET 程式在輸出 HTML 或變數時可以免於 XSS 攻擊的危險,不是 Input 喔!!

will 台灣

八月 16. 2010 15:27

liaoyj

will您好:
小弟公司最近因為需求要做XSS檢驗,
看到您的文章後去下載AntiXSSV31下來測試,
在.cs檔案裡面可以使用AntiXss.HtmlEncode等相關的函式,
可是卻無法透過設定antixssmodule.config檔案的方式對全部的.aspx做Encoding的行為,

以下是小弟測試的步驟,
1.下載AntiXSSV31.msi
2.安裝AntiXSSV31.msi
3.開啟安裝後的Sample Application專案,並更改web.config裡面的httpModules載入AntiXssModule
4.直接修改Label.Text="<script language=\"javascript\">alert('OK')</script>"
5.執行專案,會出現訊息對話視窗"OK"


不知道小弟是否有什麼地方遺漏?
感謝您的指教,
謝謝。

liaoyj

liaoyj 台灣

八月 16. 2010 15:53

liaoyj

will您好:
剛剛請問你的問題找到了,
因為Sample Application的web.config設定httpModules時並沒有載入dll,
沒有注意到給的範例可能會出現這種小疏失,
困擾了小弟幾天,

最後還是很感激您為大家提供這麼好用的方法,
感激!

liaoyj

liaoyj 台灣

八月 17. 2010 15:32

Bamboo

請教一下,為什麼您說 SRE 較不適用於 ASP.NET MVC 專案 ? 是否有特殊的原因
antixssmodule.config 的設定範例 EncodingContext="Html"  為什麼在此是鍵入  Html 呢? 還是說有別的選擇

Bamboo 台灣

八月 17. 2010 20:39

Will 保哥

Bamboo: 因為 ASP.NET MVC 不用控制項(Web Controls)。

Will 保哥 台灣

新增評論


( 您輸入的Email不會顯示於網站上 )

  Country flag

biuquote
  • 評論
  • 線上預覽
Loading