2019-07-03更新
2017-08-11更新
2017-06-23 更新
2016-11-17
Microsoft Anti-XSS Library V4.3 (Microsoft Anti-Cross Site Scripting Library V4.3)
https://www.microsoft.com/en-us/download/details.aspx?id=43126
NuGet - AntiXss
https://www.nuget.org/packages/AntiXss/
****************************************
.NET Framework 4.6 and 4.5 .NET Framework 類別庫 System.Web 命名空間
System.Web.Security.AntiXss 命名空間
https://msdn.microsoft.com/zh-tw/library/system.web.security.antixss.aspx
****************************************
ASP.NET 4.5改良
已內建Anti-Cross Site Scripting Library,AntiXssEncoder.HtmlEncode,或用懶人法<%#: Eval(“PropName”) %>
http://blog.darkthread.net/post-2012-04-25-vs11-and-aspnet-45-beta-seminar.aspx
****************************************
AntiXSS 成為內建功能
AntiXSS 這個強大的 XSS 攻擊保護函式庫,在 ASP.NET 上一直屬於外掛的功能,但到了 ASP.NET 4.5,它變成了內建的功能,ASP.NET 4.5 內建的是 AntiXSS 4.0,命名空間是 System.Web.Security.AntiXSS,內含了 AntiXSSEncoder 類別,但是它預設並不會啟用,必須要開發人員在 Web.config 中加入這一段:
<httpRuntime ...
encoderType="System.Web.Security.AntiXss.AntiXssEncoder, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> |
而像是 HtmlEncode, HtmlFormUrlEncode, XmlEncode, UrlEncode, UrlPathEncode, CssEncode 等也都成為了內建功能,為防護 XSS 攻擊做了更完善的保護。
https://dotblogs.com.tw/regionbbs/2012/03/01/asp_net_4_5_new_feature_in_core_services
例如:
string result = HttpUtility.HtmlEncoder(orgionMessage); |
using System.Web.Security.AntiXss; string result = AntiXssEncoder.HtmlEncode(orgionMessage, true); |
****************************************
AntiXss 功能被內建至 .NET Framework 4.5 :
http://msdn.microsoft.com/zh-tw/library/system.web.security.antixss.aspx
如果要啟用,請參考
http://msdn.microsoft.com/zh-tw/library/system.web.security.antixss.antixssencoder.aspx
下方說明。
****************************************
Html Editor vs HtmlEncode/Sanitizer.GetSafeHtmlFragment
https://social.msdn.microsoft.com/Forums/zh-TW/2abfcce7-a8fe-4c4f-ba2d-2ed275685bdc/html-editor-vs-htmlencodesanitizergetsafehtmlfragment?forum=236
****************************************
Why not Anti-XSS Library is built in .NET Framework ?
https://social.msdn.microsoft.com/Forums/en-US/44ed592f-dc64-43c1-9211-6877b8b32a50/why-not-antixss-library-is-built-in-net-framework-?forum=netfxbcl
****************************************
目標輸出為網頁HTML時請用AntiXssEncoder.HtmlEncode
網址輸出才使用UrlEncode
Encoder應於於輸出時才使用,非擷取之後
AntiXssEncoder.HtmlEncode Method
https://docs.microsoft.com/zh-tw/dotnet/api/system.web.security.antixss.antixssencoder.htmlencode
它使用白名單,所以除非是允許的字元,其他都被編碼,
因為大於,小於 不在白名單,所以被編碼了,所以 HTML tag 全部失效
所以必較合適用於不該出現 HTML 內容的欄位做 XSS 過濾檢查,例如單行的 HTML Input 或 ASP.NET TextBox,如果您的內容一定是 HTML 呈現,可以考慮再寫一個函數,把您認為可靠的 HTML tag 加回
(待續)因為大於,小於 不在白名單,所以被編碼了,所以 HTML tag 全部失效
所以必較合適用於不該出現 HTML 內容的欄位做 XSS 過濾檢查,例如單行的 HTML Input 或 ASP.NET TextBox,如果您的內容一定是 HTML 呈現,可以考慮再寫一個函數,把您認為可靠的 HTML tag 加回
public static string AntiXssHtmlDecode(string inputString2) { string inputString = inputString2; inputString = inputString.Replace(">", ">"); inputString = inputString.Replace("</", "</"); inputString = inputString.Replace(""", "\""); inputString = inputString.Replace("'", "'"); inputString = inputString.Replace("&", "&"); inputString = inputString.Replace(" ", " "); inputString = inputString.Replace("<a", "<A"); inputString = inputString.Replace("<A", "<A"); inputString = inputString.Replace("<b", "<b"); inputString = inputString.Replace("<B", "<B"); inputString = inputString.Replace("<c", "<c"); inputString = inputString.Replace("<C", "<C"); inputString = inputString.Replace("<d", "<d"); inputString = inputString.Replace("<D", "<D"); inputString = inputString.Replace("<h", "<H"); inputString = inputString.Replace("<H", "<H"); inputString = inputString.Replace("<i", "<i"); inputString = inputString.Replace("<I", "<I"); inputString = inputString.Replace("<sp", "<sp"); inputString = inputString.Replace("<SP", "<SP"); inputString = inputString.Replace("<st", "<st"); inputString = inputString.Replace("<ST", "<ST"); inputString = inputString.Replace("<t", "<t"); inputString = inputString.Replace("<T", "<T"); inputString = inputString.Replace("<u", "<u"); inputString = inputString.Replace("<U", "<U"); inputString = inputString.Replace("<p", "<P"); inputString = inputString.Replace("<P", "<P"); .... (略) return inputString; } |
相關
[研究] Microsoft Anti-XSS Library V4.3 (Anti-Cross Site Scripting Library)
https://shaurong.blogspot.com/2017/06/microsoft-anti-xss-library-v43-anti.html
[研究][ASP.NET] 用了 AntiXssEncoder.HtmlEncoder 仍被 Fortify SCA v17.20 說有問題
https://shaurong.blogspot.com/2018/04/aspnet-antixssencoderhtmlencoder.html
[研究] [ASP.NET] DropDownList1 的 Cross-site scripting (XSS) (Reflected XSS) 修正
https://shaurong.blogspot.com/2017/09/aspnet-dropdownlist1-cross-site.html
[研究] [ASP.NET] Cross-Site Scripting(XSS) 防範,白名單輸入驗證
https://shaurong.blogspot.com/2019/06/aspnet-cross-site-scriptingxss.html
[研究] X-XSS Protection
https://shaurong.blogspot.com/2017/06/x-xss-protection.html
沒有留言:
張貼留言