前言
攻擊者向有Cross-Site Scripting (XSS) 漏洞的網站值入惡意的HTML指令碼, 當用戶在瀏覽網站時, 由於瀏覽器無法判斷被植入的指令碼是否可信, 造成這些惡意指令碼被執行而達到攻擊的目的
列如: 訪問cookie, 改寫HTML
如何避免
過濾
過濾可疑字元, 比如說用戶上傳的DOM屬性和script, link, style, iframe等等
驗證
驗證資料格式, 每筆資料基本上都會有預期的輸入格式, 若不符合格式, 就應該禁止用戶提交表單
編碼
對輸入的某些字元進行編碼, 比如 ” < > &
C#預設會幫我們把表單中的輸入做編碼, 當然也可以把它關掉然後自己去呼叫Server.HtmlEncode
C#預設會幫我們把表單中的輸入做編碼, 當然也可以把它關掉然後自己去呼叫Server.HtmlEncode
[HttpPost] [ValidateInput(false)] public ActionResult NewItem(string Text1) { ViewBag.Text1 = Server.HtmlEncode(Text1); return View("Index"); }
透過瀏覽器來防堵XSS攻擊
Server Side在回傳的Header裡埋入X-XSS-Protection的資訊, 讓用戶端的瀏覽器幫我們檢查是否有XSS的情況發生, 並進一步停止加載
Node.js
// simple case, you can set the X-XSS-Protection header to 1; mode=block. // This tells browsers to detect and block reflected XSS. const xssFilter = require('x-xss-protection')
// Sets "X-XSS-Protection: 1; mode=block". app.use(xssFilter())
C#
在web.config裡加入以下設定
在web.config裡加入以下設定
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
<add name="X-XSS-Protection" value="1; mode=block" />
</customHeaders>
</httpProtocol>
留言
張貼留言