[XSS 2] 如何防禦 XSS 攻擊
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:
javascript:alert(‘1’)
成功被惡意執行 💣 - hexadecimal encoding with ASCII codes…