security-headers-configuration について
ブラウザー経由の攻撃への対策となる HTTP レスポンスヘッダーの設定を支援するセキュリティスキルです。Express と Nginx の例、チェックリスト、検証ツールを紹介します。
主な機能
- 01HSTS 設定の指針
- 02コンテンツセキュリティポリシー設定
- 03クリックジャッキングと MIME スニッフィング対策
- 04Express Helmet の例
- 05Nginx ヘッダー設定
- 06ヘッダー検証チェックリスト
活用シーン
- 01Express へのブラウザーセキュリティヘッダー追加
- 02Nginx でのヘッダー設定
- 03コンテンツセキュリティポリシーの確認
- 04変更後のヘッダー設定チェック
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ secondsky/ claude-skills --skill security-headers-configurationインストール後、Claude Code で/security-headers-configurationを入力して読み込まれたか確認します。
同梱ファイルreferences/python-apache.md
詳細
セキュリティヘッダーの設定
HTTP セキュリティヘッダーを実装して、一般的なブラウザベースの攻撃を防ぎます。
必須ヘッダー
| ヘッダー | 目的 | 値 |
|---|---|---|
| HSTS | HTTPS を強制する | max-age=31536000; includeSubDomains |
| CSP | リソースを制限する | default-src 'self' |
| X-Frame-Options | クリックジャッキングを防ぐ | DENY |
| X-Content-Type-Options | MIME スニッフィングを防ぐ | nosniff |
Express の実装
const helmet = require('helmet');
app.use(helmet());
// Custom CSP
app.use(helmet.contentSecurityPolicy({
directives: {
defaultSrc: ["'self'"],
scriptSrc: ["'self'", "'unsafe-inline'"],
styleSrc: ["'self'", "'unsafe-inline'"],
imgSrc: ["'self'", "data:", "https:"],
connectSrc: ["'self'", "https://api.example.com"],
fontSrc: ["'self'", "https://fonts.gstatic.com"],
frameAncestors: ["'none'"]
}
}));
Nginx の設定
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
add_header X-Frame-Options "DENY" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "geolocation=(), microphone=(), camera=()" always;
add_header Content-Security-Policy "default-src 'self'; script-src 'self'" always;
検証ツール
セキュリティヘッダーのチェックリスト
- HSTS を有効にし、max-age を長く設定する
- CSP を設定してテストする
- X-Frame-Options を DENY に設定する
- X-Content-Type-Options を nosniff に設定する
- Referrer-Policy を設定する
- Permissions-Policy で使用しない機能を無効にする
追加の実装
以下については、references/python-apache.md を参照してください。
- Python Flask のセキュリティヘッダーミドルウェア
- Flask-Talisman ライブラリの設定
- Apache .htaccess の設定
- ヘッダーのテストスクリプト
よくある間違い
- CSP を report-only にしたままにする
- 制限が緩すぎるポリシーを使用する
- 変更後のテストを忘れる
- HSTS にすべてのサブドメインを含めない
コメント
Markdown 対応