前言
最近在碰一些資安的東東,發現自己對於這一塊知識都比較薄弱,身為前端工程師資安通常並不是首要關注的職責,但一但有漏洞保證後果不堪設想,於是近期來補足一下這方面的知識。
什麼是 XSS
XSS(Cross-Site Scripting)跨站腳本攻擊,意味著攻擊者透過漏洞注入惡意腳本讓目標網站執行。具體惡意腳本可以做的事情包括但不限於:獲取敏感信息、修改網頁內容、跳轉惡意網站……等。具體來說漏洞有以下幾種類型,大概念都是透過不同方式想辦法讓目標網站執行惡意腳本進而操控網站。
反射型 XSS
主要依靠用戶發送惡意請求代碼,舉例將惡意腳本夾帶在連結網址中,當用戶點擊連結時沒有預防的網站會執行惡意腳本。像是以下網址只要被訪問就會執行惡意腳本:alert(1)
:
這麼做惡意腳本不會被存在資料庫當中,只要後端疏於檢核誤將請求代碼執行就會造成該漏洞。這種攻擊方式通常會透過短網址隱藏其意圖,讓不知情的用戶夾帶惡意腳本進入網站。
存儲型 XSS
與反射型相似,不過透過漏洞將惡意腳本存儲在網站的資料庫當中,最常見像是在可自訂內容的留言板或文章,當其他用戶訪問網站時會連帶執行惡意腳本。
DOM-based XSS
將惡意腳本透過 DOM 的形式插入到網頁中,最常見原因莫屬透過 innerHTML
直接將任何字串視為 HTML 插入到 DOM 當中執行。也可以搭配先前兩種方式,透過操作 DOM 的方式將惡意腳本插入到網頁中執行。
防範 XSS
- 防範 XSS 最直接的方式就是「不要相信任何用戶輸入內容是安全可被執行的」,視任何用戶輸入內容預設為不安全,確定消毒(轉換為沒有威脅的字串)過後才能視為程式執行。
- CSP(Content Security Policy):通過 CSP 設置來限制網頁中可以執行的腳本。
- HttpOnly:設置 HttpOnly 屬性,防止 JavaScript 訪問 Cookie。
- SameSite:設置 SameSite 屬性,限制第三方 Cookie 的訪問。
總結
現代齊全的工具與文件幫助下意外執行用戶提供的惡意腳本的機率已經大幅降低,無論如何都不輕易相信用戶輸入即能最大程度防範 XSS。
延伸閱讀
- Types of XSS - OWASP
- 什麼是 XSS 攻擊?如何防範? - ExplainThis
- 零基礎資安系列(二)-認識 XSS(Cross-Site Scripting)-Cymetrics Tech Blog
- Cross-Site Scripting (XSS) Explained - PwnFunction