推薦使用 Microsoft Anti-Cross Site Scripting Library v3.1
原文链接:http://blog.miniasp.com/post/2009/09/27/Recommand-Microsoft-Anti-XSS-Library-V31.aspx
雖然我之前已經寫過一篇【 推薦使用 Microsoft Anti-Cross Site Scripting Library V3.0 】文章,而且這次 Anti-XSS Library v3.1 也只有小幅新增功能,但這次新增的兩個方法(Methods)卻是我盼望許久的功能,終於被我給等到了。我覺得任何開發 ASP.NET Web 應用程式的人都應該注意並使用這一套強大的 Anti-XSS Library,絕對有助於提升你現有 Web 應用程式的安全性。
本次改版新增的 Methods 分別是:
- AntiXss.GetSafeHtml 方法:將傳入的 HTML 視為一整個頁面進行過濾。
- AntiXss.GetSafeHtmlFragment 方法:將傳入的 HTML 視為一個 HTML 片段進行過濾。

這兩個新增的方法 (Methods) 都是用來將傳入的字串/文字轉換成「安全的 HTML 語法」,並且支援 串流 (Stream) 處理,所以當要處理大量 HTML 字串時也非常有效率,且被轉換過的 HTML 語法也會被 正規化 (Normalize) 處理,讓非標準的 HTML 變成標準的 HTML 語法/格式。
所謂「安全的 HTML 語法」 是指當傳入的 HTML 包含任何被判定為危險的(malicious)內容就會自動被刪除,用以保證最後得到的 HTML 語法是絕對安全的 HTML 版本,讓你日後就算程式寫在爛也不受 XSS 攻擊的威脅,其中包括惡意的 HTML 標籤 (例如: script, iframe, link,meta, …)、惡意的 HTML 屬性 (例如: onload, onclick, …)、惡意的 CSS 屬性 (各位知道在 CSS 中可以插入 JavaScript 執行嗎? 如下範例: )
<STYLE type="text/css">BODY{background:url("javascript:alert('XSS')")}</STYLE>
能在CSS 執行 JavaScript 是很多人不知道的開發技巧,但這同時也是駭客最愛玩的 XSS 遊戲,不過這語法在新版的瀏覽器中都被移除了,目前已知支援這語法的瀏覽器有 萬惡的 IE6.0、IE7.0、Firefox 2.0、Opera 9.02 等,有認識朋友還在用 IE6/7 的人趕快請他們升級吧。
我寫了一支簡單的驗證程式,想探探 Anti-XSS Library v3.1 過濾惡意 HTML 的能力,我沒寫得很複雜,單純只是想看看轉換出來的結果如何。
程式碼如下:

轉換出來的結果是:
<div style="color:red; background:#FFF">OK </div>
當我試圖將 CSS 的 background 換成 url 的格式

轉換出來的結果是:
<div style="color:red">OK </div>
我也更進一步測試了 XSS (Cross Site Scripting) Cheat Sheet 所列的所有 XSS 攻擊情境,也確認 Anti-XSS Library 幾乎可以防禦所有的 XSS 手法 (除了一些非常非常舊的瀏覽器的XSS弱點之外),Anti-XSS Library 過濾 HTML 的精準度無庸置疑的好、執行速度也恨快,不管怎樣都比你自己過濾 HTML 還來的安全,這畢竟是發展好多年、經過無數次驗證過的 Anti-XSS Library 版本,而且這還是完全開放原始碼的專案,有興趣研究、驗證 Anti-XSS Library 的人可以到這裡下載最新版原始碼。
上段提到的一些非常非常舊的瀏覽器的XSS弱點講的是在 Netscape 4.0 中的一種非常特殊、詭異的 JavaScript 寫法竟然也能運作,如下範例:
<BR SIZE="&{alert('XSS')}">
說實在的,沒認真研究過 XSS 的人不會想到 XSS 有多少花招可以玩,你光看 XSS (Cross Site Scripting) Cheat Sheet 所列的所有 XSS 攻擊情境就非常有趣了,很多你想都沒想到的攻擊手法,還有 Ultimate XSS CSS injection 也是很有創意的攻擊手法。
一般人在接受網頁表單送出 HTML 時,如果要限制特定標籤才能寫入到資料庫時,或許會使用類似【清除字串中的HTML標籤利用RegExp進階版】的作法,但這樣的限制並不完整,還是非常容易被 XSS 攻擊,只要透過 HTML Attribute Injection 或 CSS Injection 就能攻擊成功,所以建議的作法是:
- 先用 Anti-XSS Library v3.1 支援的 AntiXss.GetSafeHtml 或 AntiXss.GetSafeHtmlFragment 方法過濾一遍所有輸入的 HTML 字串。
- 然後再過濾不想支援的 HTML 標籤,這個時候再使用【清除字串中的HTML標籤利用RegExp進階版】作法就非常完美了。
今天一整個下午都在研究 Anti-XSS Library v3.1,我發現裡面有個 HtmlToHtml Class 主要負責過濾 HTML 工作,而且寫的非常有彈性,當中有個 委派 (delegate) 屬性 HtmlTagCallback 可以用來自訂過濾特定標籤的程式邏輯,透過這種方式實做過濾標籤的功能也會比用 Regex 實做來的好,只可惜在 Anti-XSS Library v3.1 中將 HtmlToHtml類別標注為 internal 所以沒辦法直接使用。由於 Anti-XSS Library v3.1 是開放原始碼(MS-PL),如果有需要的人還是可以將這些類別移到自己的專案中使用。
相關連結
- Microsoft Anti-Cross Site Scripting Library V3.1 下載
- AntiXSS – CodePlex [ Source Code ] [ Discussions ]
- New and Improved AntiXss 3.1, Now With Sanitization
- HTML Sanitization in Anti-XSS Library
- The Microsoft Information Security Tools (IST) team
- Anti-XSS 3.0 Released | Jossie | Channel 9
- XSS (Cross Site Scripting) Cheat Sheet
- Ultimate XSS CSS injection
推薦使用 Microsoft Anti-Cross Site Scripting Library v3.1的更多相关文章
- 推薦使用 Microsoft Anti-Cross Site Scripting Library V3.0
原文出至: http://blog.miniasp.com/post/2009/07/29/Recommand-Microsoft-Anti-Cross-Site-Scripting-Library- ...
- 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 ...
随机推荐
- iOS开发之多线程技术——NSOperation篇
本篇将从四个方面对iOS开发中使用到的NSOperation技术进行讲解: 一.什么是NSOperation 二.我们为什么使用NSOperation 三.在实际开发中如何使用NSOperation ...
- go的环境变量设置
GOROOT go的安装路劲 如:D:\Program Files\Go GOPATH go的工作路径 GOPATH可以设置多个.存放包文件.比如你引入 "xxx"包.那么go会去 ...
- 使用AS3输出ByteArray为16进制
package { import flash.utils.ByteArray; /** * 输出ByteArray为16进制 * @author Rise */ public class Byte2H ...
- 简单的ASP.NET Forms身份认证
读了几篇牛人的此方面的文章,自己也动手做了一下,就想有必要总结一下.当然我的文章质量自然不能与人家相比,只是写给从没有接触过这个知识点的朋友. 网站的身份认证我以前只知道session,偶然发现一些牛 ...
- (ios)MPMoviePlayerController首次播放视频的时候,没有控制条
问题: 在视频播放时,现在控制条采用磨砂的效果,会遮罩部分视频 解决思路 1 播放器直接设置不带控制条,在app在 Foreground状态,默认播放器暂停,这样需要在获得Foreground事件,进 ...
- Spring 整体架构
1. Core Container:核心容器(core.Beans.Context.Expression Language Core.Beans框架基础构成,提供IOC.依赖注入特性.BeanFa ...
- Java对象的序列化
1.概念 序列化:把Java对象转换为字节序列的过程. 反序列化:把字节序列恢复为Java对象的过程. 2.用途 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个 ...
- (1)编写一个接口ShapePara,要求: 接口中的方法: int getArea():获得图形的面积。int getCircumference():获得图形的周长 (2)编写一个圆类Circle,要求:圆类Circle实现接口ShapePara。 该类包含有成员变量: radius:public 修饰的double类型radius,表示圆的半径。 x:private修饰的double型变量x,
package com.hanqi.test; //创建接口 public interface ShapePara { //获取面积的方法 double getArea(); //获取周长的方法 do ...
- windows下socket学习(一)
关于socket的文章,园子里面有很多,其实无非就是 WSAStartup.socket.bind.listen.accept.recv.send(服务端),WSAStartup.socket.con ...
- 其他(一)Visual Studio 自动排版快捷键
自动对齐快捷键为:ctrl+k+d 按快捷键前,请先将需要对齐的代码选中.不选中是不行的.