原文出至: 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. runtime学习笔记

    获取属性objc_property_t * propertys = class_copyPropertyList(clazz, &outCount); 获取属性名NSString * key ...

  2. Asp.net MVC中提交集合对象,实现Model绑定

    Asp.net MVC中的Model自动绑定功能,方便了我们对于request中的数据的处理, 从客户端的请求数据,自动地以Action方法参数的形式呈现.有时候我们的Action方法中想要接收数组类 ...

  3. 用MsmqBinding投送message出现的一个灵异事件 【第二篇】

    一直都在用Msmqbinding,也一直忽视了message里面的内容格式是什么样的,这也是微软给我们高层封装带给我们的开发效率,但同时一旦中间出了什么问题, 就不知道从何查起了.有个需求是这样的,服 ...

  4. Javascript之旅——终点站:困惑的settimeout

    有时候结局不是很美好,但起码这也算是一种结局,这个系列的最后一篇settimeout,这是一个让人困惑的函数,也是我一直在吐槽JS的 原因,我们看不到JS的源代码,setimeout同样也是,从始到终 ...

  5. C语言基本类型之long long int

    大家都知道int在linux系统下默认是占4个字节,数值表示范围是:-2147483648~2147483647.即使是无符号unsigned int类型表示范围:0-4294967295,大约42亿 ...

  6. c++11 新特性之lambda表达式

    写过c#之后,觉得c#里的lambda表达式和delegate配合使用,这样的机制用起来非常爽.c++11也有了lambda表达式,形式上有细小的差异.形式如下: c#:(input paramete ...

  7. LaTeX字体相关

    以下内容均来自网络.   字体命令: 相应的字体声明都有相应的字体命令 family: \textrm{文本} \texttt{ } \textsf{  } shape : \textup{文本} \ ...

  8. 禁止Visual Studio启动时自动连接TFS服务器

    在默认设置情况下,Visual Studio启动时,会自动连接上次打开过的TFS服务器.这种设计能够提高开发人员的工作效率,避免每次手动连接TFS服务器. 但是在某些情景中,也会给人造成不必要的麻烦, ...

  9. Solr初始化源码分析-Solr初始化与启动

    用solr做项目已经有一年有余,但都是使用层面,只是利用solr现有机制,修改参数,然后监控调优,从没有对solr进行源码级别的研究.但是,最近手头的一个项目,让我感觉必须把solrn内部原理和扩展机 ...

  10. Spring学习之AOP总结帖

    AOP(面向方面编程),也可称为面向切面编程,是一种编程范式,提供从另一个角度来考虑程序结构从而完善面向对象编程(OOP). 在进行 OOP 开发时,都是基于对组件(比如类)进行开发,然后对组件进行组 ...