# 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)