# XSS Cross-Site Scripting - 攻擊者通過注入惡意JavaScript腳本代碼到網頁中,使之在用戶的瀏覽器中執行。XSS攻擊的目標是獲取用戶的敏感信息、破壞網站的正常功能、盜取用戶的Cookie等。 - 攻擊類型 - **反射型XSS(Reflected XSS):** - 攻擊者將惡意腳本包含在URL中,放在 GET 參數傳遞,當用戶點擊包含這段腳本的URL時,腳本會被注入到網頁中並執行。 - e.g. - ``` [404 - Not Found](http://www.example.com/upload.asp?id=<script>alert(1);</script>) ``` - **儲存型XSS(Stored XSS):** - 攻擊者將惡意腳本存儲在網站的數據庫database中,當其他用戶訪問包含這段腳本的頁面時,腳本會被執行。 - e.g. 將 Javascript 注入留言板,當下一位 User 瀏覽網頁時,網頁會載入留言板的 Javascript 進而使 User 受到攻擊 - ``` 我是壞人! <script>alert(1);</script> ``` - **DOM-based XSS:** - 攻擊者通過修改網頁的DOM(Document Object Model)來執行惡意腳本,這種攻擊方式不涉及伺服器端的操作。 - e.g. - ``` <img src=# onerror=”alert(123)”> ``` - 防範 - **輸入驗證:** - 不論是前後端都應假設輸入是惡意且不可信任的 - 在接受用戶輸入的地方進行嚴格的輸入驗證,過濾掉不合法的字符和腳本。 - 應確認每個網頁表單輸入欄位是否為合理的資料類型與內容,例如:年齡的欄位在文法上應只接受0–9的數字,而語意上應確認此數字介於 0–120 - **輸出轉義:** - 在將用戶輸入顯示到網頁上時,對輸出進行轉義,將特殊字符轉換成HTML實體,防止腳本被解析。 - 絕對不要將使用者的輸入放入 註解、屬性名稱、標籤名稱 等,因為這些位置都能將字符串作為程式碼運行 - 伺服器端 - **使用HTTP-only Cookie:** - 將敏感信息存儲在HTTP-only Cookie中,防止被JavaScript訪問 - **Content Security Policy(CSP):** 通過設置CSP標頭,明確定義允許瀏覽器在該頁面上加載的內容來源,涵蓋的類型包括 JavaScriptCSS、HTML框架、字體、圖片和可嵌入對象,例如 Java applet、ActiveX等。 - 對href 處理 - [[href]] - **協議檢查:** - 只允許 `http` 或 `https` 開頭的協議 - 合法:`href="http://example.com"` - 不合法:`href="javascript:alert('XSS')"` - **htmlspecialchars 處理:** - 對 `href` 中的特殊字符進行 HTML 轉碼處理 - 將特殊字符轉換為它們對應的 HTML 實體,這樣可以防止潛在的 XSS 攻擊 - 例如 - 原始:`href="<script>alert('XSS')</script>"` - 處理後:`href="<script>alert('XSS')</script>"`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up