原文链接: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 分別是:

  1. AntiXss.GetSafeHtml 方法:將傳入的 HTML 視為一整個頁面進行過濾。
  2. 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.0IE7.0Firefox 2.0Opera 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 就能攻擊成功,所以建議的作法是:

  1. 先用 Anti-XSS Library v3.1 支援的 AntiXss.GetSafeHtml 或 AntiXss.GetSafeHtmlFragment 方法過濾一遍所有輸入的 HTML 字串。
  2. 然後再過濾不想支援的 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的更多相关文章

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

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

  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. html常用的综合体

    clip:rect(20px 100px 50px 20px); clip属性中的rect,clip:rect(y1 x2 y2 x1)参数说明如下: y1=定位的y坐标(垂直方向)的起点 x1=定位 ...

  2. eclipse中配置dtd和xsd文件实现自动提示

    DTD 类型约束文件      1. Window->Preferences->XML->XML Catalog->User Specified Entries窗口中,选择Ad ...

  3. 敏捷开发--scrum

    1.  请简述一下什么是敏捷开发(Agile Development),以及什么是持续集成.  敏捷开发是一种以人为核心.迭代.循序渐进的开发方法.在敏捷开发中,软件项目的构建被切分成多个子项目,各个 ...

  4. 因GIT默认忽略.dll文件导致的Visual Studio项目通过Bamboo编译失败

    背景 由GIT管理的Visual Studio项目,使用Stash管理远端代码库,通过与Stash集成的Bamboo生成项目并发布 现象 Visual Studio项目本地生成成功,用SourceTr ...

  5. PHOTOSHOP(PS)快捷键大全

    PHOTOSHOP常用快捷键大全一.文件新建 CTRL+N打开 CTRL+O 打开为 ALT+CTRL+O关闭 CTRL+W保存 CTRL+S 另存为 CTRL+SHIFT+S另存为网页格式 CTRL ...

  6. SQL Server 2008 R2——T-SQL 存储过程 返回表

    ==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完 ...

  7. strlen和sizeof的区别

    1.sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型.该类型保证能容纳实现所建立的最大对象的字节大小.   2.sizeof是算符,strlen是函 ...

  8. 56相册视频(土豆相册视频 激动相册视频 QQ动感影集等)——下载教程

    由于目前流行的相册视频或影集大多是由Flash.音乐和图片组合而成的动画,不属于完整视频,所以不能用常规的解析方法下载. 鉴于很多朋友希望可以下载自己精心制作的相册,故在本教程中,我们将以图文并茂的方 ...

  9. linux下如何打包压缩?解包解压?.tar文件.gz文件

    ===文件打包.压缩 ==打包 tar [root@521478.com]# tar -cvf etc1.tar /etc //c创建 v详细 f打包后文件名 [root@521478.com]# t ...

  10. Eclipse快捷键-方便查找

    [Ct rl+T] 搜索当前接口的实现类 1. [ALT +/]    此快捷键为用户编辑的好帮手,能为用户提供内容的辅助,不要为记不全方法和属性名称犯愁,当记不全类.方法和属性的名字时,多体验一下[ ...