# Cross-Site Scripting(XSS)
###### tags: `NSPT`
* 防止 XSS 的心態: Don’t trust user input/request 任何輸入都有可能是危險的! 輸入框包含網址列、input、任何可以讓使用者更動網頁內容的地方
* attacker 利用 使用者對網站的信任。
## 防範XSS的準則
1. 對於欄位輸入,要做好驗證與檢查,對於前後端,都應該假設輸入是惡意且不可信任的。
2. 資料輸入方式應該要符合該資料欄位的規則。Ex: 月份1~12...。
3. 所有的輸入都應該要encode 成純字串格式,以避免惡意程式碼被執行。
4. 絕對不要將使用者的輸入放入 註解、屬性名稱、標籤名稱 等,因為這些位置都能將字符串作為程式碼運行。
## Reflected XSS (AKA Non-Persistent or Type I)
* 最常見的 XSS 攻擊類型,通常是將惡意程式會藏在網址列裡,放在參數列傳遞。
* 需要由使用者主動點擊URL才會生效,因此跟社交工程有關聯(phishing...)。
* 由於Url通常很詭異,因此會使用 短網址 or httpEncoder 來欺騙使用者。
* “Non-persistent” means that the malicious (Javascript) payload is echoed by the
server in an immediate response to an HTTP request from the victim.
```
http://www.xss.com/upload.asp?id=<script>alert(1);</script>
```
## DOM Based XSS (AKA Type-0)
* 與前一型一樣需要使用phishing,來誘導使用者點擊URL。
* 前端javascript程式碼不夠嚴謹,把不可信的內容插入到了頁面。
* 資料提取 以及 程式執行 都是在client side完成,屬於前端javascript的安全漏洞。
```
<img src=# onerror=”alert(123)”>
```
[DOM Based Cross Site Scripting or XSS of the Third Kind](https://docs.gnet0.com/ebooks/XSS/DOM%20Based%20Cross%20Site%20Scripting%20or%20XSS%20of%20the%20Third%20Kind.pdf)
## Stored XSS (AKA Persistent or Type II)
* 不須使用phishing 也能夠使 其他使用者受到攻擊。
* attacker 將惡意程式提交,使程式片段被記錄在資料庫中。Ex: 討論區、評論區...。
* 常見的攻擊為,將惡意程式注入到留言板,當其他User 讀取留言時,就會受到攻擊。
* “Persistent” means that the payload is stored by the system, and may later be embedded by the vulnerable system in an HTML page provided to a victim.
```
XSS ATTACK! <script>alert(1);</script>
```
## Reflected v.s. DOM Based
* Reflected :
是屬於 Server端的漏洞而產生的攻擊手法。
惡意程式在Server端被執行,然後才會將結果送回Client端。
* Dom Based :
是因為javascript執行時,不安全的操作DOM物件而產生的攻擊漏洞。
Server端回覆正常的網頁,惡意程式則是會在Client端被javascript執行。
## Reference
[零基礎資安系列(二)-認識 XSS(Cross-Site Scripting)](https://tech-blog.cymetrics.io/posts/jo/zerobased-cross-site-scripting/)
[【網路安全】給你講清楚什麼是XSS攻擊](https://www.796t.com/content/1570622822.html)
[Type Of XSS](https://owasp.org/www-community/Types_of_Cross-Site_Scripting)
[XSS 從頭談起:歷史與由來](https://blog.huli.tw/2021/10/11/xss-history/)
[NSPT midterm report](https://drive.google.com/file/d/1NNIEVvBK4fv_4juvhmDDoEDMNMzcXO1k/view?usp=share_link)