原文出至: http://blog.miniasp.com/post/2009/07/29/Recommand-Microsoft-Anti-Cross-Site-Scripting-Library-V30.aspx

微軟最近推出了 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\ ,過程中提供兩個選項讓你安裝:

分別說明如下:

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 進行網站安全防護與安全檢測。

相關連結

推薦使用 Microsoft Anti-Cross Site Scripting Library V3.0的更多相关文章

  1. 推薦使用 Microsoft Anti-Cross Site Scripting Library v3.1

    原文链接:http://blog.miniasp.com/post/2009/09/27/Recommand-Microsoft-Anti-XSS-Library-V31.aspx 雖然我之前已經寫過 ...

  2. XSS (Cross Site Scripting) Prevention Cheat Sheet(XSS防护检查单)

    本文是 XSS防御检查单的翻译版本 https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sh ...

  3. 跨站脚本攻击XXS(Cross Site Scripting)修复方案

    今天突然发现,网站被主页莫名奇妙的出现了陌生的广告. 通过排查发现是跨站脚本攻击XXS(Cross Site Scripting).以下为解决方案. 漏洞类型: Cross Site Scriptin ...

  4. WebGoat学习——跨站脚本攻击(Cross‐Site Scripting (XSS))

    跨站脚本攻击(Cross‐Site Scripting (XSS)) XSS(Cross Site Script)跨站脚本攻击.是指攻击者向被攻击Web 页面里插入恶意html代码,当用户浏览该页之时 ...

  5. 跨站脚本攻击(Cross‐Site Scripting (XSS))

    跨站脚本攻击(Cross‐Site Scripting (XSS)) 跨站脚本攻击(Cross‐Site Scripting (XSS)) XSS(Cross Site Script)跨站脚本攻击.是 ...

  6. Healwire Online Pharmacy 3.0 Cross Site Request Forgery / Cross Site Scripting

    Healwire Online Pharmacy version 3.0 suffers from cross site request forgery and cross site scriptin ...

  7. Web安全之XSS(Cross Site Scripting)深入理解

    XSS的含义 XSS(Cross Site Scripting)即跨站脚本.跨站的主要内容是在脚本上. 跨站脚本 跨站脚本的跨,体现了浏览器的特性,可以跨域.所以也就给远程代码或者第三方域上的代码提供 ...

  8. XSS 跨站脚本攻击(Cross Site Scripting)

    xss表示Cross Site Scripting(跨站脚本攻击),它与SQL注入攻击类似,SQL注入攻击中以SQL语句作为用户输入,从而达到查询/修改/删除数据的目的,而在xss攻击中,通过插入恶意 ...

  9. WordPress Duplicator 0.4.4 Cross Site Scripting

    测试方法: 提供程序(方法)可能带有攻击性,仅供安全研究与教学之用,风险自负! Advisory ID: HTB23162 Product:DuplicatorWordPressPlugin Vend ...

随机推荐

  1. NSArray Sort 排序

    打算实现tableview的生序降序排序 ```js NSArray * rs= [oneArray sortedArrayUsingComparator:NSComparisonResult(RFI ...

  2. C#之 Lambda表达式

    Lambda表达式 简化了匿名委托的使用,让你让代码更加简洁,优雅.据说它是微软自c#1.0后新增的最重要的功能之一. 首先来看一下其发展 根据上面的发展历程,可以感到Lambda表达式愈加简化. 详 ...

  3. 面试题整理:SQL(二)

    1. 现有广告合同表Orders,表示广告在哪个广告位的哪几天需要播出 OrderID Positioncode Startdate Enddate 1 A 2015-11-01 2015-11-03 ...

  4. 记一次ORACLE的UNDO表空间爆满分析过程

    这篇文章是记录一次ORACLE数据库UNDO表空间爆满的分析过程,主要整理.梳理了同事分析的思路.具体过程如下所示: 早上收到一数据库服务器的UNDO表空间的告警邮件,最早一封是7:55发出的(监控作 ...

  5. python-1 python基础知识

    python第一课代码笔记 hello world [root@heartbeat-data- python]# vim hello1.py #!/usr/bin/env python print ( ...

  6. 教你一招 - 如何给nopcommerce增加一个类似admin的area

    asp.net mvc里面的area是什么,点击这里查看 如果在nopcommerce里面加入类似admin的area,步骤如下: 1.新建一个mvc空项目MvcApplication1,位置放在\N ...

  7. [转]二重积分换元法的一种简单证明 (ps:里面的符号有点小错误,理解就好。。。

    ---恢复内容开始--- 10.3二重积分的换元积分法 在一元函数定积分的计算中,我们常常进行换元,以达删繁就简的目的,当然,二重积分也有换元积分的问题. 首先让我们回顾一下前面曾讨论的一个事实. 设 ...

  8. Android常见的按钮监听器实现方式

    为按钮(Button)添加响应事件,需要为其设置监听器(Listener).本文总结了Android中常用的几种Button Listener. 第一种:匿名内部类作为事件监听器类 1 2 3 4 5 ...

  9. [PHP]swoole_server几个进程的分工

    readme.md-/Users/zjh/Documents/我的文章/[PHP]swoole_server几个进程的分工 html{font-family: sans-serif;-ms-text- ...

  10. hdu 5898 odd-even number 数位DP

    传送门:hdu 5898 odd-even number 思路:数位DP,套着数位DP的模板搞一发就可以了不过要注意前导0的处理,dp[pos][pre][status][ze] pos:当前处理的位 ...