光熱發電發電機
產生內容安全策略標頭
如何使用光熱發電發電機
- 1輸入你計劃允許的策略指令(default-src、script-src、img-src 等)。
- 2輸入你信任的來源域名或協議。
- 3檢視生成的 Content-Security-Policy 響應頭,粘到伺服器配置中。
構建內容安全策略(CSP)
CSP = 指令1 值1 值2; 指令2 值3; ...CSP 將瀏覽器可載入指令碼、樣式、圖片與連線的來源列入白名單,即使存在 XSS 漏洞也能阻止未授權內容注入。
建議先在 report-only(僅報告)模式下執行以記錄違規,否則過嚴的策略會破壞站點上的合法資源。
CSP(內容安全策略)通過 HTTP 響應頭告訴瀏覽器「只允許載入這些來源的資源」,是防禦 XSS 的**縱深防禦**手段。即使攻擊者成功注入了指令碼,如果不在白名單裡,瀏覽器也會拒絕執行。最嚴格的策略是 `default-src 'none'`,然後逐項開放需要的來源。
**內聯指令碼是 CSP 落地的最大障礙**:預設 CSP 會禁止所有內聯 <script> 和 onclick 屬性。三個解決辦法:① 提取到外部檔案(最乾淨);② 用 nonce(每次響應生成隨機值,<script nonce="...">);③ 用 hash(對指令碼內容做 SHA-256)。`unsafe-inline` 雖然能放行內聯指令碼,但等於放棄了 CSP 的主要防護,應儘量避免。**建議先用 Content-Security-Policy-Report-Only 模式上線觀察一段時間**,收集違規報告、調整策略後再切換為強制模式。
| 指令 | 作用 | 示例值 |
|---|---|---|
| default-src | 預設資源策略(兜底) | 'self' |
| script-src | JavaScript 來源 | 'self' 'nonce-xxx' |
| style-src | CSS 來源 | 'self' 'unsafe-inline' |
| img-src | 圖片來源 | 'self' data: https: |
| connect-src | XHR/fetch/WebSocket | 'self' https://api.example.com |
| font-src | 字型來源 | 'self' https://fonts.gstatic.com |
| frame-ancestors | 允許被誰巢狀(防點選劫持) | 'none' |
| upgrade-insecure-requests | 自動升級 HTTP 請求 | (無值) |
| report-uri | 違規上報地址 | /csp-report |
常用 CSP 指令速查
常見問題
default-src 有什麼作用?
它為所有未顯式指定的指令提供兜底,因此設為 'self' 可覆蓋大多數標籤。
是否應先使用僅報告模式?
是,先觀察上報的違規一段時間,以便在不破壞站點的前提下調整策略。
CSP 能阻止所有 XSS 嗎?
它大幅降低影響,但屬於縱深防禦層,不能替代輸入過濾。
CSP 能完全防住 XSS 嗎?
不能,它是縱深防禦的一環而非銀彈。CSP 可以阻止外部指令碼載入和大部分內聯注入,但無法防禦:① 已被允許的域名下的惡意指令碼(如 CDN 被汙染);② 通過 JSONP 端點注入;③ DOM 型 XSS 中直接操作已存在指令碼的攻擊。正確的防護層次是:輸入驗證 → 輸出轉義 → CSP → 定期安全審計。另外 csp 配置錯誤(如 script-src 包含 * 或允許 data:)反而形同虛設。
為什麼加了 CSP 後第三方服務失效?
因為第三方(統計、廣告、客服、地圖、字型)通常要載入指令碼、發起請求、嵌入 iframe,每一項都需要對應指令放行。排查方法:開啟瀏覽器控制台,CSP 違規會列印具體被阻止的 URL 和違反的指令,按需新增即可。常見需求:Google Analytics 需要 script-src + connect-src,Google Fonts 需要 style-src + font-src,YouTube 嵌入需要 frame-src。**建議為第三方單獨列出來源域名,而不是圖省事用萬用字元。**
