[XSS 2] 如何防禦 XSS 攻擊

Hannah Lin
Hannah Lin
Published in
10 min readSep 28, 2021

--

Understanding Frontend Security 系列文

1. 簡單弄懂同源政策 (Same Origin Policy) 與跨網域 (CORS)
2.
[XSS 1] 從攻擊自己網站學 XSS (Cross-Site Scripting)
3. [XSS 2] 如何防禦 XSS 攻擊
4. Content Security Policy (CSP) — 幫你網站列白名單吧
5. [CSRF] One click attack: 利用網站對使用者瀏覽器信任達成攻擊

防禦分兩個層面,一個是避免被埋炸彈,一個是就算不小心被放炸彈,如何不讓它爆炸。這一篇會從錯誤的防禦方式開始再談談該如何正確防禦

🔖 文章索引1. 錯誤的防禦方式
2.
阻止攻擊者在網頁埋炸彈 (惡意程式)
3. 阻止炸彈爆炸 (惡意碼被執行)
4. 其他防禦
5. 總結

錯誤的防禦方式

用過濾字串的方法防禦是不夠的

上一篇看到很多惡意程式碼包含 <><script>javascript:,你可能會想那就把這些字串過濾掉就好啦

  • <a href=”javascript:alert(1)”>Click</a> <a href=””>Click</a>
  • <img src=’3' onerror=this.remove();alert(1)><img src=’3'>

這種把字串過濾方式也叫做 XSS Filter (註 1)

例如以下範例

過濾掉 javascript (練習連結),但

  • jaVaScript:alert(1) 成功被惡意執行 💣
  • Whitespace Embedding:jaVa script:alert(1) 成功被惡意執行(空白是 tab) 💣
  • HTML entities with ASCII: &#x6A;avascript&#0000058&#0000097lert(‘1’) 成功被惡意執行 💣
  • hexadecimal encoding with ASCII codes

--

--