摘要:ASP.NET MVC - 實作 Microsoft Anti-Cross Site Scripting (AntiXss)
之前在做專案的時候機緣巧合下使用到 FCKeditor,相信很多人一定用過它,甚至於您的每一個專案中都有它的存在,它是那麼便利的讓人很容易進行一些 XSS 攻擊;當然不是只有用 FCKeditor 會遇到這個問題,在很多的情況下都會有 XSS 的攻擊產生。就是因為這樣,微軟就推出了 Microsoft Anti-Cross Site Scripting Library v3.1 來降低網站被 XSS 攻擊的問題,下面就以 ASP.NET MVC 來實作...
安裝的部分就跳過不做,滿簡單的沒有甚麼特別要說明的部分,不過微軟所提供的 Help 有空還是要來看看...
步驟一:將「AntiXSSLibrary.dll」加入參考,檔案位址在「C:\Program Files\Microsoft Information Security\Microsoft Anti-Cross Site Scripting Library v3.1\Library」下
步驟二:建立一個名為「TestAntiXss」的 Controller,並且撰寫程式碼
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;
using Microsoft.Security.Application;
namespace MVC_AntiXss.Controllers
{
public class TestAntiXssController : Controller
{
public ActionResult Index()
{
return View();
}
[ValidateInput(false)]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(string InputHtml)
{
ViewData["SourceData"] = InputHtml;
ViewData["AntiXssData"] = AntiXss.GetSafeHtmlFragment(InputHtml);
return View();
}
}
}
步驟三:撰寫 Html 的程式碼
Code:
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>填寫資料</h2>
<%using (Html.BeginForm())
{ %>
輸入 HTML 語法:<%=Html.TextBox("InputHtml")%>
<input type="submit" value="送出" />
<%} %>
<%if (ViewData["SourceData"] != null && ViewData["AntiXssData"] != null)
{%>
<p><%=ViewData["SourceData"]%></p>
<p><%=ViewData["AntiXssData"]%></p>
<%} %>
</asp:Content>
結果:
在方框中輸入「<a herf="#" onclick="javascript:alert('aaa');"> aaa </a>」,並按下送出
當點選第一個 aaa 時,會跳出 Alert 的訊息方框,恭喜你你中招
當點選第二個 aaa 時會沒有反應,因為已經被 AntiXss 給處理掉了
呆言呆語:這真是一個好東西,但是要特別注意一點,之前在專案中使用時,發覺它若遇到 input 中有 id 或 name 的 Attribute 會主動在 id 與 name 的 名稱 前面加上「x_」東西,所以若你是要將 Html 格式存入資料庫後,在某一個頁面顯示,並且搭配 jQuery 來變化作效果的話,這就要特別注意了...
參考:
AntiXSS
推薦使用 Microsoft Anti-Cross Site Scripting Library V3.0
推薦使用 Microsoft Anti-Cross Site Scripting Library v3.1