ブラウザ内ツール
HTTPヘッダ解析器
HTTPレスポンスヘッダを貼り付けると、各ヘッダの意味を1行ずつ解説し、HSTS・CSP・nosniff などのセキュリティヘッダの過不足を診断します。 キャッシュ・CORS・Cookie属性の要注意点も指摘します。
取得は curl -sI https://example.com が手軽。ブラウザからは他オリジンのヘッダをJSで読めない(CORS)ため貼り付け式。解析はすべてブラウザ内(送信なし)。
セキュリティヘッダ診断
主要なセキュリティヘッダはすべて揃っている。
text/html; charset=utf-8
本体のメディアタイプと文字コード。text/html; charset=utf-8 のように指定する。誤りは文字化けや誤実行の原因。
public, max-age=0, must-revalidate
キャッシュの可否と鮮度を制御する。no-store(保存禁止)/ no-cache(毎回再検証)/ max-age(秒)/ private・public / immutable など。
max-age=63072000; includeSubDomains; preload
HSTS。以後このサイトへは必ずHTTPSで接続するようブラウザに指示する。中間者による平文へのダウングレードを防ぐ。
十分な max-age。良好。
default-src 'self'; script-src 'self' 'unsafe-inline'
CSP。読み込み可能なスクリプト・スタイル等の出所を制限し、XSSの被害を大幅に減らす最重要ヘッダの1つ。
'unsafe-inline' / 'unsafe-eval' があるとXSS防御が大きく弱まる。nonce/hashへの移行を。
nosniff
MIMEスニッフィングを禁止する。ブラウザがContent-Typeを勝手に推測して実行するのを防ぐ。値は nosniff 一択。
nosniff。良好。
DENY
クリックジャッキング対策。他サイトのiframeでの埋め込みを制限する(DENY / SAMEORIGIN)。新しくは CSP の frame-ancestors が上位互換。
strict-origin-when-cross-origin
遷移先へ送るRefererの量を制御する。strict-origin-when-cross-origin などでURLパスや機密情報の漏洩を抑える。
session=abc123; Path=/; HttpOnly; SameSite=Lax
クッキーを発行する。属性でセキュリティが大きく変わる。
属性 Secure が無い。セッションCookieなら付与を推奨。
cloudflare
サーバーソフトの名称。詳細なバージョンまで出すと攻撃者に手がかりを与えるため、絞るのが無難。
Express
使用フレームワーク等を明かすヘッダ。
実装スタックを露出させる。攻撃の手がかりになるため削除を推奨。
*
CORS。このリソースへアクセスを許すオリジンを示す。
ワイルドカード * は誰でも読める。認証付きリソース(credentials)では * を使えない点にも注意。
Accept-Encoding
どのリクエストヘッダによってレスポンスが変わるかを示す。Accept-Encoding や Cookie の指定はキャッシュ設計に影響する。
まず入れたい5つのセキュリティヘッダ
- Strict-Transport-Security:HTTPSを強制し、平文へのダウングレードを防ぐ。
- Content-Security-Policy:スクリプトの出所を絞り、XSSの被害を大幅に減らす。
- X-Content-Type-Options: nosniff:MIMEの推測実行を止める。
- X-Frame-Options / frame-ancestors:クリックジャッキングを防ぐ。
- Referrer-Policy:遷移先へURLや機密情報が漏れる量を抑える。