推薦使用 Microsoft Anti-Cross Site Scripting Library V3.0
微軟最近推出了 Microsoft Anti-Cross Site Scripting Library V3.0 正式版(RTM),但在國內似乎沒看到許多人提到這套函示庫,就我來觀察有幾點可能的原因:
- 沒真正遭受到 Cross Site Scripting (XSS) 攻擊
- 遭受到 Cross Site Scripting (XSS) 攻擊也不自知
- 有些人連 Cross Site Scripting (XSS) 是什麼都不知道
從 Wikipedia 上的 Cross-site scripting (XSS) 提到 XSS 有三種類型:
- 非固定式 XSS 攻擊 (Non-persistent)
- 這是最常見的攻擊類型,日前好幾次大規模 XSS 攻擊事件都是此類攻擊。
- 沒經驗的開發人員最容易遭受此類型的 XSS 攻擊。
- 像 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.NET 與 Request 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 進行網站安全防護與安全檢測。
相關連結
- Anti-XSS Library 3.0 RTM
- Download Microsoft Anti-Cross Site Scripting Library V3.0
- AntiXSS – Home ( CodePlex )
- Request Validation - Preventing Script Attacks
- HttpUtility.HtmlEncode 方法
- How To: Prevent Cross-Site Scripting in ASP.NET
- UrlEncode vs. HtmlEncode
- 跨網站指令碼 - 維基百科,自由的百科全書
- Cross-site scripting - Wikipedia, the free encyclopedia
- Microsoft | Information Security Tools Team Blog
- Take Charge of Your Security [ASP.NET MVC]
- Prevent Cross-Site Request Forgery (CSRF) using ASP.NET MVC's AntiForgeryToken() helper
推薦使用 Microsoft Anti-Cross Site Scripting Library V3.0的更多相关文章
- 推薦使用 Microsoft Anti-Cross Site Scripting Library v3.1
原文链接:http://blog.miniasp.com/post/2009/09/27/Recommand-Microsoft-Anti-XSS-Library-V31.aspx 雖然我之前已經寫過 ...
- XSS (Cross Site Scripting) Prevention Cheat Sheet(XSS防护检查单)
本文是 XSS防御检查单的翻译版本 https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sh ...
- 跨站脚本攻击XXS(Cross Site Scripting)修复方案
今天突然发现,网站被主页莫名奇妙的出现了陌生的广告. 通过排查发现是跨站脚本攻击XXS(Cross Site Scripting).以下为解决方案. 漏洞类型: Cross Site Scriptin ...
- WebGoat学习——跨站脚本攻击(Cross‐Site Scripting (XSS))
跨站脚本攻击(Cross‐Site Scripting (XSS)) XSS(Cross Site Script)跨站脚本攻击.是指攻击者向被攻击Web 页面里插入恶意html代码,当用户浏览该页之时 ...
- 跨站脚本攻击(Cross‐Site Scripting (XSS))
跨站脚本攻击(Cross‐Site Scripting (XSS)) 跨站脚本攻击(Cross‐Site Scripting (XSS)) XSS(Cross Site Script)跨站脚本攻击.是 ...
- 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 ...
- Web安全之XSS(Cross Site Scripting)深入理解
XSS的含义 XSS(Cross Site Scripting)即跨站脚本.跨站的主要内容是在脚本上. 跨站脚本 跨站脚本的跨,体现了浏览器的特性,可以跨域.所以也就给远程代码或者第三方域上的代码提供 ...
- XSS 跨站脚本攻击(Cross Site Scripting)
xss表示Cross Site Scripting(跨站脚本攻击),它与SQL注入攻击类似,SQL注入攻击中以SQL语句作为用户输入,从而达到查询/修改/删除数据的目的,而在xss攻击中,通过插入恶意 ...
- WordPress Duplicator 0.4.4 Cross Site Scripting
测试方法: 提供程序(方法)可能带有攻击性,仅供安全研究与教学之用,风险自负! Advisory ID: HTB23162 Product:DuplicatorWordPressPlugin Vend ...
随机推荐
- java 实现(代码) -- 水仙花数 + 杨辉三角形
/* 在控制台输出所有的“水仙花数” 水仙花:100-999 在以上数字范围内:这个数=个位*个位*个位+十位*十位*十位+百位*百位*百位 例如:xyz=x^3 +y^3 +z^3 怎么把三位数字拆 ...
- Lojic X
媒体 赫兹 电话 500HZ 网络数据 8000HZ CD 44100HZ 电脑 48000HZ DVD 96000HZ 最大值(蓝光) 192000HZ 横向———————— 清晰度 ...
- 带进度条的 jQuery 文件拖放上传插件
jQuery File Uploader :jQuery File Uploader 是一个 jQuery 文件拖放上传插件 兼容性判断 下载:https://github.com/danielm/u ...
- coursera机器学习-logistic回归,正则化
#对coursera上Andrew Ng老师开的机器学习课程的笔记和心得: #注:此笔记是我自己认为本节课里比较重要.难理解或容易忘记的内容并做了些补充,并非是课堂详细笔记和要点: #标记为<补 ...
- Stanford coursera Andrew Ng 机器学习课程编程作业(Exercise 2)及总结
Exercise 1:Linear Regression---实现一个线性回归 关于如何实现一个线性回归,请参考:http://www.cnblogs.com/hapjin/p/6079012.htm ...
- mysql错误一例:ERROR 1030 (HY000): Got error 28 from storage engine
在使用mysqldump导出一份建库脚本是,发生了下面的错误: 当执行 desc table_name; 时也报错: tag为表名,show index from tag;倒是可以执行. 其实真正的错 ...
- EF Power Tools 数据库逆向生成时T4模板修改
VS2013上使用EF Power Tools的Reverse Engineer Code First逆向生成. 发现数据库中的decimal(18, 4)字段在生成的mapping类中没有精度和小数 ...
- linux 拨号+squid监控脚本
客户端 #!/bin/bash #get_memory-info a=`free -m|grep Mem|awk '{print$2}'` #total-memory b=`free -m|grep ...
- InnoDB源码分析--事务日志(一)
原创文章,转载请注明原文链接(http://www.cnblogs.com/wingsless/p/5705314.html) 在之前的文章<InnoDB的WAL方式学习>(http:// ...
- Windows下用Codeblocks建立一个最简单的DLL动态链接库
转自:http://blog.csdn.net/wangwei_cq/article/details/8187576 来源:http://hi.baidu.com/hellosim/item/9ae4 ...