XSS
Cross-Site Scripting(跨站腳本攻擊)是一種常見的網路安全漏洞,它允許攻擊者將惡意腳本注入到網頁中,然後在使用者瀏覽器上執行。這種攻擊通常發生在帶有使用者交互功能的網頁上,例如表單、評論框、搜尋框等。
利用 XSS 漏洞可執行各種惡意操作:
- 竊取使用者的會話 Cookie
- 竊取敏感資訊
- 篡改網頁內容
- 重新導向使用者到惡意網站
攻擊類型
| 類型 | 說明 |
|---|---|
| Stored XSS | 存儲型:惡意腳本存入伺服器,影響所有瀏覽該頁面的使用者 |
| Reflected XSS | 反射型:惡意腳本透過 URL 參數即時反射執行 |
| DOM-based XSS | DOM 型:在客戶端 JavaScript 中操作 DOM 時注入惡意腳本 |
防護措施
1. 輸入驗證
對於用戶輸入的數據進行嚴格的驗證,防止惡意輸入。
2. 輸出轉義
在將用戶輸入的數據輸出到 Web 頁面時,使用適當的轉義方法,如 HTML Entity Encoding,以防止腳本在瀏覽器上執行。
3. Content Security Policy (CSP)
設置安全的 HTTP Header,限制允許加載的資源,防止惡意腳本的執行。
Content-Security-Policy: default-src 'self'; script-src 'self'4. 安全的 Cookie 設定
| 屬性 | 說明 | 用途 |
|---|---|---|
HttpOnly | 防止 JavaScript 訪問 Cookie | 避免 XSS 竊取 Session |
Secure | 僅在 HTTPS 連接中傳輸 | 防止中間人攻擊竊取 |
SameSite | 控制跨站請求行為 | 防止 CSRF 攻擊 |
SameSite Cookie 設定
SameSite 屬性用於設置 Cookie 的跨站請求行為,以防止 CSRF(Cross-Site Request Forgery)攻擊。
| 值 | 行為 | 適用場景 |
|---|---|---|
Strict | 禁止第三方站點訪問 Cookie,僅允許在同一站點內訪問 | 銀行、購物網站等有金流交易的網站 |
Lax | 在 Redirect 到目標 URL 的 GET 請求中允許第三方訪問 Cookie,POST 請求則禁止 | 一般網站預設值 |
None | 允許所有跨站請求訪問 Cookie,必須配合 Secure 使用 | 需要跨站共享 Cookie 的場景(如 SSO) |
當設置
SameSite=None 時,必須同時設置 Secure 屬性,否則 Cookie 將被瀏覽器拒絕。Cookie 設定範例
Set-Cookie: session=abc123; HttpOnly; Secure; SameSite=Strict