ASP.NET MVC - 實作 Microsoft Anti-Cross Site Scripting (AntiXss)

摘要: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