AntiXSS,由微軟推出的用於防止XSS攻擊的一個類庫,可實現輸入白名單機制和輸出轉義。
AntiXSS最新版的下載地址:http://wpl.codeplex.com
下載安裝之后,安裝目錄下有以下文件:
AntiXSS.chm:
包括類庫的操作手冊參數說明。
AntiXSSLibrary.dll:
包含Antixss,Encoder類(輸出轉義),AntiXSS類中的方法已經過時,建議使用Encoder類中相同的方法。
HtmlSanitizationLibrary.dll:
包含Sanitizer類(輸入白名單),只包含GetSafeString和GetSafeHtmlFragment兩個方法。
使用時在工程內添加引用HtmlSanitizationLibrary.dll 和AntiXSSLibrary.dll
導入命名空間using Microsoft.Security.Application;
我們需要決定使用哪個編碼函數。接下來的表格將幫助你決定使用哪個編碼函數:
編碼函數 |
應該使用的場景 |
示例/模式 |
HtmlEncode |
不可信的輸入被用作html輸出,被分配給一個html屬性除外 |
<a href="http://www.contoso.com">Click Here [Untrusted input]</a> |
HtmlAttributeEncode |
不可信的輸入作為一個html屬性 |
<hr noshade size=[Untrusted input]> |
JavaScriptEncode |
不可信的輸入作為一個javascript上下文 |
<script type="text/javascript"> … [Untrusted input] … </script> |
UrlEncode |
不可信的輸入作為一個url(例如作為一個查詢參數的值) |
<a href="http://search.msn.com/results.aspx? q=[Untrusted-input]">Click Here!</a> |
VisualBasicScriptEncode |
不可信的輸入作為一個visual basic上下文 |
<script type="text/vbscript" language="vbscript"> … [Untrusted input] … </script> |
XmlEncode |
不可信的輸入作為一個xml輸出,除了把它作為一個xml節點的屬性 |
<xml_tag>[Untrusted input]</xml_tag> |
XmlAttributeEncode |
不可信的輸入作為一個xml的屬性 |
<xml_tag attribute=[Untrusted input]>Some Text</xml_tag> |
在將 HTML 數據保存到數據庫之前,使用 AntiXSS Sanitizer 對象(該庫是一個單獨的下載文件,將在下文中介紹)調用 GetSafeHtml 或 GetSafeHtmlFragment;不要在保存數據之前對數據進行編碼。AntiXss.GetSafeHtmlFragment(html)方法,這個方法會替換掉html里的危險字符。 確保所有輸出內容都經過 HTML 編碼。
AntiXss類庫是一款預防注入攻擊的開源類庫,它通過白名單機制進行內容編碼。目前它支持這些輸入類型:XML,HTML,QueryString,HTMLFormURLEncode,Ldap,JavaScript。在日常的開發中我們並不會安全編碼像Ldap或JavaScript這樣的輸入類型,大多都是對XML,QueryString或Form URL進行安全編碼。下面是個安全編碼XML文件的小例子: