為 WordPress 增加安全防護 – 設定 Security Headers

WordPress Security Headers 是 由 Web Server 回傳給瀏覽器的一組 HTTP 標頭
用來「限制瀏覽器能做什麼、不能做什麼」。它不是修漏洞,而是降低漏洞被利用的成功率跟增加攻破網站的困難度

一、為什麼 WordPress「一定要設」Security Headers?

WordPress 生態=高風險目標

  • 外掛多、主題多
  • 第三方 JS 多(廣告、追蹤、GA、FB)
  • 外掛品質參差不齊

就算你自己寫得很乾淨,
外掛一個 XSS 漏洞就全站陪葬

二、設定 Security Headers 的實際好處

1. 防止 XSS(最重要)

Content-Security-Policy

沒設 CSP

  • 任何 inline script 都能跑
  • 外掛被插 <script>alert(1)</script> 就 GG

有設 CSP

  • 只允許特定來源 JS
  • inline script 預設不能跑

👉 XSS 成功率直接下降 80% 以上


2. 防止 Clickjacking(iframe 釣魚)

X-Frame-Options: SAMEORIGIN

防止:

  • 網站被嵌進別人頁面
  • 用透明按鈕誘導你點擊(後台操作)

👉 對 WordPress 後台特別重要


3. 防止瀏覽器亂猜檔案類型

X-Content-Type-Options: nosniff

防止:

  • .jpg 被當成 JS 執行
  • 上傳檔案被惡意利用

👉 對有上傳功能的站(媒體、會員)很重要


4. 強制 HTTPS(SEO + 安全)

Strict-Transport-Security (HSTS)

效果:

  • 瀏覽器永遠只走 HTTPS
  • 防中間人攻擊
  • Google 加分項目

👉 Cloudflare + WordPress 必設


5. 限制 Referer 洩漏資料

Referrer-Policy

避免:

  • URL 中的 token、參數被送到第三方
  • 追蹤、外洩敏感資訊

6. 提升 SEO 與信任度(間接)

  • Lighthouse Security 分數↑
  • Google PageSpeed 建議項目
  • 減少惡意 JS 被插入 → 不被標示為「此網站可能有害」
Apache htaccess

三、htaccess 設定 Security Headers

在 .htaccess 增加下方程式。

<IfModule mod_headers.c>
    ##########################################
    # HTTPS / HSTS 強制安全連線
    ##########################################
    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"

    ##########################################
    #  X-Frame-Options (防止 Clickjacking)
    ##########################################
    Header always set X-Frame-Options "SAMEORIGIN"

    ##########################################
    # X-Content-Type-Options (防止 MIME 偽裝)
    ##########################################
    Header always set X-Content-Type-Options "nosniff"

    ##########################################
    # Referrer Policy (保護隱私)
    ##########################################
    Header always set Referrer-Policy "strict-origin-when-cross-origin"

    ##########################################
    #  X-XSS-Protection (舊版瀏覽器 XSS 防護)
    ##########################################
    Header always set X-XSS-Protection "1; mode=block"


</IfModule>

<IfModule mod_headers.c>
Header always set Content-Security-Policy "default-src 'self' https:; img-src 'self' data: https:; media-src 'self' https:; script-src 'self' 'unsafe-inline' 'unsafe-eval' https:; style-src 'self' 'unsafe-inline' https:; font-src 'self' data: https:; connect-src 'self' https:;"
</IfModule>


<IfModule mod_headers.c>
    Header always set Permissions-Policy "geolocation=(), camera=(), microphone=(), payment=(), usb=(), fullscreen=(self), autoplay=(self)"
</IfModule>

之後至 https://securityheaders.com/ 測試一下。分數應該是 A 。要得到 A+ 得看網站所使用的外掛跟連接分析後調整 Content-Security-Policy 這個 Header 。不然設太嚴可能網站前後台會有問題。

blog.ocam.live
blog.ocam.live

關注科技新聞、SEO、人工智慧、電玩模擬器、程式設言、與 IT 日常等議題,深入簡出文章的說明並持續追蹤相關新聞的發展與報導。