📖 CSP安全設定

分類:伺服器管理 | 作者:pake | 發布時間:2024-11-20 20:18

HTTP Content Security Policy(CSP)安全設定指南

Content Security Policy(CSP)是一種 HTTP 安全標頭(Header),用於減少 XSS(跨站腳本攻擊)資料竊取 以及 惡意代碼注入 的風險。本指南將介紹如何在 Apache(httpd)NGINX 設定 CSP 標頭,並提供最佳安全實踐。


目錄


什麼是 CSP?

CSP 是一種 HTTP 回應標頭,允許網站管理員控制 允許載入的資源(如 JavaScript、CSS、影像、字型等),防止惡意代碼執行。例如:

Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted-scripts.com

此設定允許:
✅ 只從相同來源 (self) 加載所有資源
✅ 允許 https://trusted-scripts.com 提供 JavaScript
❌ 禁止內聯 JavaScript (<script> alert(1); </script>)
❌ 禁止載入未知的外部 JavaScript


CSP 設定語法

CSP 使用 指令(Directives) 來控制不同類型的資源載入。常見指令包括:

指令 作用
default-src 預設來源(適用於所有類別資源)
script-src 允許的 JavaScript 來源
style-src 允許的 CSS 來源
img-src 允許的圖片來源
font-src 允許的字型來源
connect-src 允許的 AJAX、WebSocket 來源
frame-src 允許的 iframe 來源
object-src 允許的 objectembed 來源

範例 CSP 設定

Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted-scripts.com; style-src 'self' 'unsafe-inline'; img-src 'self' data:

⚠️ 避免使用 unsafe-inline(允許內聯腳本),容易遭受 XSS 攻擊!


Apache 設定 CSP

在 Apache 上,使用 Header set 設定 CSP 標頭。

步驟 1:啟用 headers 模組

sudo a2enmod headers
sudo systemctl restart apache2

步驟 2:修改 Apache 設定檔(如 /etc/httpd/conf.d/security.conf

sudo nano /etc/httpd/conf.d/security.conf

新增:

<IfModule mod_headers.c>
    Header set Content-Security-Policy "default-src 'self'; script-src 'self' https://trusted-scripts.com; style-src 'self'; img-src 'self' data:; frame-ancestors 'none'"
</IfModule>

儲存後,重新啟動 Apache:

sudo systemctl restart httpd

NGINX 設定 CSP

在 NGINX 上,使用 add_header 設定 CSP 標頭。

步驟 1:編輯 NGINX 設定檔

sudo nano /etc/nginx/conf.d/security.conf

新增:

server {
    listen 443 ssl;
    server_name example.com;

    add_header Content-Security-Policy "default-src 'self'; script-src 'self' https://trusted-scripts.com; style-src 'self'; img-src 'self' data:; frame-ancestors 'none'" always;

    location / {
        root /var/www/html;
        index index.html;
    }
}

儲存後,重新啟動 NGINX:

sudo systemctl restart nginx

CSP 安全最佳實踐

僅允許受信任的來源script-srcstyle-srcimg-src 等應設定明確的允許來源)。
阻止內聯 JavaScript 與 CSS(避免 unsafe-inline)。
阻止 eval()script-src 應該加入 strict-dynamic)。
防止 iframe 點擊劫持(使用 frame-ancestors 'none')。
避免過度放寬限制(如 *data:)。
啟用報告模式(使用 report-uri 來接收違規回報)。

範例(增加 report-uri):

Content-Security-Policy: default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self'; report-uri /csp-violation-report

測試與驗證 CSP 設定

1. 使用 curl 測試

curl -I -s https://your-domain.com | grep Content-Security-Policy

2. 使用瀏覽器開發者工具

Chrome / Firefox 開發者工具(F12)內,檢查 Network > Headers,確認 CSP 標頭是否正確應用。

3. 使用 CSP Evaluator

Google 提供 CSP Evaluator,可分析 CSP 設定的安全性。


結語

CSP 是防止 XSS 攻擊的重要安全機制。本指南介紹了如何在 Apache 和 NGINX 上設定 CSP 安全標頭,並提供了最佳安全實踐與測試方法。建議根據網站需求,自訂 最嚴格但不影響功能 的 CSP 設定,以確保 網站安全性

⬅ 上一篇 下一篇 ➡
🔙 返回 伺服器管理 📚 返回教學列表 🏠 返回首頁