2013年5月28日 星期二

ASP.NET & jQuery 注意小細節來防止XSS攻擊

防範小技巧
1.一般我們在開發網站過程中,有可能為了專案的需求而暫時關閉基本防護的功能,所以在上線前記得檢查一下 web.config 的設定是不是正常。
1<system.web>
2   <pages validateRequest="true" /> //預設為 ture => 開啟防護
3</system.web>
2.常見的方法可以利用 Server.HtmlEncode 來對內容進行編碼:
1string value = Server.HtmlEncode("<script>alert('XSS 攻擊');</script>");
而如果使用的 .Net Framework 為 4.5的版本可以利用新的方法 AntiXssEncoder.HtmlEncode 來對內容進行編碼:
1// 需引用 System.Web.Security.AntiXss;
2string value = AntiXssEncoder.HtmlEncode("<script>alert('XSS 攻擊');</script>", true);
3.若使用 ASP.NET MVC 進行開發,在 View 裡利用 Html Helper 顯示資料時也已經幫我過處理大部分的安全性問題。
首先我們先故意做一個會造成 XSS 攻擊的惡意程式碼,這是在 ASP.NET MVC 中的 Controller 
1public ActionResult Index()
2{
3    TestModel model = new TestModel();
4    model.XssAtack = "<script>alert('攻擊');</script>";
5    return View(model);
6}
下面示範幾種在 View 中顯示資料的方法,來檢驗各個方法對於 XSS 的防範機制:
1@Html.DisplayFor(p => p.XssAtack) 攻擊失敗,顯示純文字
2 
3@Html.DisplayForModel() 攻擊失敗,顯示純文字
4 
5@Html.EditorFor(P => P.XssAtack) 攻擊失敗,顯示 input 標籤
6 
7@Html.Encode(Model.XssAtack) 攻擊失敗,將內容進行編碼
1@Html.Raw(Model.XssAtack) // 攻擊成功,跳出 alert 視窗
2 
3@Html.DisplayTextFor(P => P.XssAtack)  // 攻擊成功,跳出 alert 視窗
測試結果中顯示 Html.Raw 和 Html.DisplayTextFor 會造成 XSS 攻擊的問題,所以在開發 ASP.NET MVC 時也應該小心使用這些 Html Helper,你防止不必要的問題發生,反觀如果需求就是要跳出一段 alert 來提醒使用者,也可以利用這兩種方法來做資料顯示。


其他更多詳細內容請參考原始文章

沒有留言:

張貼留言