🍖

.htaccessをナメてた話@CSP

2025/01/09に公開

いつも通りにHeader set

セキュリティ対策としてレスポンスヘッダに設定を入れてた時に気付いた話

Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-Content-Type-Options "nosniff"
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
Header always set Permissions-Policy "なんやらかんやら"
Header always set Referrer-Policy "strict-origin-when-cross-origin"

あとは〜X-XSS-Protection...じゃなくて〜Content-Security-Policy
昔は設定が楽だったのになぁ...
レポートモードで弾かれるやつをリストアップしながら外部リソースを許可していく。

Header set Content-Security-Policy-Report-Only "default-src 'self'; \
    font-src 'self'\
      https://fonts.gstatic.com;\
    style-src 'self'\
      'nonce-xxxxxxxxxxxxx'\
      https://fonts.googleapis.com;\
    script-src 'self'\
      'nonce-xxxxxxxxxxxxx'\
      https://ajax.googleapis.com\
      https://cdnjs.cloudflare.com\
      https://*.google.com\
      https://*.gstatic.com\
      https://*.google-analytics.com\
      https://*.googletagmanager.com\
      https://*.googleadservices.com\
      https://cdn.jsdelivr.net\
      https://*.youtube.com\
      https://*.sibulla.com;\
    img-src 'self'\
      https://*.google.co.jp\
      https://*.google.com\
      https://*.googletagmanager.com\
      https://*.googleadservices.com\
      https://*.doubleclick.net;\
    connect-src 'self'\
      https://*.google-analytics.com\
      https://*.analytics.google.com;\
    form-action 'self'\
      https://*.google-analytics.com;\
    frame-src 'self'\
      https://*.youtube.com\
      https://*.google.com"

リソースごとにこんな感じで外部リソースのドメインを入れていって...
コンソールでレポートが出なくなったらOK!
あとはレポートモードを解除してCSPを有効化!
一応実装担当の人がわかるようにコメント入れとこっ!

# -Report-Onlyをつけるとサイトに影響しないモードでチェック
# Header set Content-Security-Policy-Report-Only "default-src 'self'; \
Header set Content-Security-Policy "default-src 'self'; \
    font-src 'self'\
      https://fonts.gstatic.com;\
    style-src 'self'\
      'nonce-xxxxxxxxxxxxx'\
    ・・・

あとはアップしたらチェック!

無い

レスポンスヘッダにContent-Security-Policyが出てこない...
余計な空白?バックスラッシュの位置??
虎の子のClaudeに聞いてもおかしいところは無いという...
ジッとソースを見る...

# -Report-Onlyをつけるとサイトに影響しないモードでチェック
# Header set Content-Security-Policy-Report-Only "default-src 'self'; \
Header set Content-Security-Policy "default-src 'self'; \
    font-src 'self'\
      https://fonts.gstatic.com;\
    style-src 'self'\
      'nonce-xxxxxxxxxxxxx'\
    ・・・

ん?このコメント行

# Header set Content-Security-Policy-Report-Only "default-src 'self'; \
Header set Content-Security-Policy "default-src 'self'; \
⋮

次の行もコメントになっている...?
コメント行のバックスラッシュを消してみる

# Header set Content-Security-Policy-Report-Only "default-src 'self';
Header set Content-Security-Policy "default-src 'self'; \
⋮

直った、しょーもないミス...

おわり。

Discussion