XSS 簡易攻擊手段

最近在看 front-end 貼文看到一篇 XSS 攻擊的介紹,覺得很有趣,
讓我想起了多年前的一個練習,順便整理一下有哪些我知道的攻擊方式與防範手段。

XSS 是啥呢?
XSS cross site script,簡單說就是因為後端信任了使用者的輸入資料,在有漏洞或是沒有過濾掉或者瀏覽器問題的文字下,使用者可能幫你填入邪惡的程式碼,導致網站出錯。
所以在使用者輸入的部分要特別小心處理,可能是網址又或者只是個輸入框。


舉例:一個 html tag 可能因為漏洞,被迫產生兩個 html

<h1>{{ user }}<h1/>

        多寫一個 html 截止與開始的 tag,在裡面其中多塞自己的程式。

        <h1></h1><script>document.body.innerHTML = '';</script><h1></h1>

以下統整了XSS-Game 這個網站介紹的幾個簡單攻擊手法。
1. 在前端可以讓 user 輸入 html 變且顯示,document.body.innerHTML = '<h1>' + {{ msg }} + '</h1>',像 {{ msg }} 就可能會被寫 '</h1><alert>alert('hi');</alert><h1>'
2. 透過 html tag 上的屬性觸發,像是 img onError 寫入
3. 使用者輸入要先過濾
4. a tag 可以使用 javascript:[function] 使用 js
5. 要正規化檢查使用者的輸入 decodeURIComponents 或是 toLowerCase() 再比對是必須的

另一個 xss 的練習
http://prompt.ml/1

留言