前言 攻擊者向有Cross-Site Scripting (XSS) 漏洞的網站值入惡意的HTML指令碼, 當用戶在瀏覽網站時, 由於瀏覽器無法判斷被植入的指令碼是否可信, 造成這些惡意指令碼被執行而達到攻擊的目的 列如: 訪問cookie, 改寫HTML 如何避免 過濾 過濾可疑字元, 比如說用戶上傳的DOM屬性和script, link, style, iframe等等 驗證 驗證資料格式, 每筆資料基本上都會有預期的輸入格式, 若不符合格式, 就應該禁止用戶提交表單 編碼 對輸入的某些字元進行編碼, 比如 ” < > & 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裡加入以下設定 <httpProtoc...