XSS防範方法

Outline

  1. 什麼是XSS
  2. XSS的類型
  3. XSS防範方法

什麼是XSS

跨網站指令碼(Cross-Site Script; XSS)是一種常見的網站安全漏洞,攻擊者通過在目標網站輸入腳本代碼,然後使其在瀏覽器中執行,從而實現對用戶的攻擊。

XSS 攻擊通常發生在具有使用者輸入的網站上,例如表單輸入、討論區、評論區等。攻擊者利用網站未正確處理用戶輸入的漏洞,將腳本代碼嵌入網頁中。當其他用戶瀏覽該網頁時,瀏覽器會執行這些惡意腳本,導致攻擊者能夠竊取用戶的敏感資訊、在用戶間傳播惡意連結、修改網頁內容等。

XSS的類型

XSS 攻擊可以分為三種主要類型:

  1. 存儲型 XSS:攻擊者將惡意腳本存儲在目標網站的資料庫中,當其他用戶訪問相關頁面時,腳本會從資料庫中提取並執行。

  2. 反射型 XSS:攻擊者將惡意腳本嵌入 URL 中,當用戶點擊包含惡意腳本的 URL 時,網站會將腳本作為參數回傳,瀏覽器解析並執行該腳本。

  3. DOM 型 XSS:攻擊者通過修改網頁的 DOM(文檔物件模型),在用戶瀏覽器中執行惡意腳本,從而達到攻擊目的。

XSS防範方法

防範 XSS 攻擊的主要方法包括:

  1. 輸入驗證和過濾:對用戶輸入的數據進行適當的驗證和過濾,過濾掉潛在的腳本代碼。
  2. 輸出編碼:在將用戶輸入的內容插入到網頁中之前,對其進行 HTML 編碼,以防止腳本被執行。
  3. 使用安全性標頭:通過設置安全性標頭,如 Content-Security-Policy。

在progam.cs中設定Security Header

//add security header
app.Use(async (context,next) =>
{
    context.Response.Headers.Add("X-XSS-Protection", "1; mode=block");
    await next.Invoke();
});

將前端傳至後端的值進行編碼

系統套件System.Web中有可以從新編碼的方法。

//value 傳入 <script>alert(1)</script>

string encodeValue = HttpUtility.HtmlEncode(value);

//編碼後變為 &lt;script&gt;alert(1)&lt;/script&gt;

將資料已重新編碼後的格式存入DB,如果取出傳回前端,會以文字的形式顯示於瀏覽器上而不會觸發script。
<script>alert(1)</script>

補充

在網路上會找到很多舊版的資料。

asp.net 本身有提供防範XSS的機制

在Web.config中加入:

<pages validateRequest="true"></pages>

但是在 asp.net Core 中已經不再使用Web.config,而validaterequest功能也被移除不用了。

使用AntiXSS來重新編碼

於NuGet套件管理器中下載AntiXSS。

string encodeValue = Encode.HtmlEncode(value);

但AntiXSS目前並不支援 .net core。

tags: back-end