XSS 跨站腳本攻擊
簡單說
當網站讀取時,執行了攻擊者的「惡意程式碼」。
說明
XSS (Cross-site scripting) 主要是在輸入框,透過規避字元規則讓原本是「字串」的內容,輸入了可以被執行的 Javascript
惡意程式碼。 常見有三種類型:
- Stored XSS 儲存型 ★★★★★
- Reflected XSS 反射型 ★★☆☆☆
- DOM Based XSS DOM型 ★★★☆☆
Stored XSS 儲存型
讀取網站時,執行了「被儲存」在 服務端
資料庫的惡意程式碼。 例如: 論壇留言版中成功輸入 <script>alert('這是惡意程式')</script>
且保存到資料庫,當網站被讀取顯示留言內容時,就會被執行這段程式碼。
🛡 預防方式
- 透過編碼
Encode
再輸出 - 過濾敏感字元 (有機會被繞過)
技巧
可以使用 <script>alert('這是惡意程式')</script>
,來測試 XSS 防範。
Reflected XSS 反射型
將 script
藏在 URL 網址中,當 GET
讀取網址時,被執行惡意程式碼。這樣的 URL 看起來很可疑,所以通常是把 URL 再透過 encode 變成 https://www.example.com?name=%3Cscript%3Ealert%28%27%E9%80%99%E6%98%AF%E6%83%A1%E6%84%8F%E7%A8%8B%E5%BC%8F%27%29%3C%2Fscript%3E
DOM Based XSS DOM型
常見在 客戶端
(前端) 直接寫入 HTML (innerHTML
) ,將惡意程式碼也寫入到網頁上,所執行的攻擊,可能會將用戶的 cookie
資料傳送到攻擊者的網站上。例如攻擊者可以放入一個被隱藏看不見的 <img>
,不過該 img 的 src 放的是一個「攜帶 cookie 資訊的請求」,如此一來攻擊者的伺服器就可以拿到被攻擊者的 cookie 了。
🛡 預防方式
盡量避免直接寫入 HTML,非不得已也要是可以信任的來源。