Skip to content

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,非不得已也要是可以信任的來源。

Reference