shared-security-auth-security について
Security Patterns は、アプリケーションコードとワークフローのセキュリティ対策を案内するエージェントスキルです。シークレット、依存関係の脆弱性、XSS、CSRF、認証トークン、アクセス制御を扱います。
主な機能
- 01シークレットの保管とローテーション
- 02依存関係のスキャンと修正期限
- 03サニタイズと CSP による XSS 対策
- 04CSRF 対策パターン
- 05認証トークンの安全な保管
- 06CODEOWNERS とアクセス制御の指針
活用シーン
- 01認証情報のリポジトリ混入防止
- 02依存関係の脆弱性対応の確認
- 03HTML 描画の XSS 対策
- 04認証と機密ファイルレビューの保護
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ agents-inc/ skills --skill shared-security-auth-securityインストール後、Claude Code で/shared-security-auth-securityを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
metadata.yamlreference.mdexamples/access-control.mdcore.mddependency-security.mdxss-prevention.md詳細
セキュリティパターン
クイックガイド: シークレットの管理には、.env.local(Git の追跡対象外)と CI のシークレットを使用します。漏えいやチームの変更があった場合はローテーションします。依存関係のセキュリティ対策には、自動スキャン(Dependabot)を有効にし、重大な脆弱性には24時間以内にパッチを適用します。XSS の防止には、最新のフレームワークでは出力がデフォルトで自動エスケープされます。DOMPurify でサニタイズしない限り、生の HTML を注入してこの機能を回避してはいけません。CSP ヘッダーを設定します。CODEOWNERS では、auth/、.env.example、workflows への変更にセキュリティチームのレビューを必須にします。
詳細なリソース:
- コード例については、examples/core.md(必須パターン)を参照してください
- 判断フレームワークとアンチパターンについては、reference.mdを参照してください
追加の例:
- examples/xss-prevention.md - XSS 対策、DOMPurify、CSP ヘッダー
- examples/dependency-security.md - Dependabot、CI セキュリティチェック
- examples/access-control.md - CODEOWNERS、レート制限、ブランチ保護
<critical_requirements>
重要:このスキルを使用する前に
すべてのコードで、CLAUDE.md に記載されたプロジェクトの規約に従ってください(kebab-case、名前付きエクスポート、インポート順序、
import type、名前付き定数)
(リポジトリにシークレットをコミットしてはいけません。.env.local と CI のシークレットのみを使用してください)
(生の HTML をレンダリングする前に、すべてのユーザー入力をサニタイズする必要があります。HTML を注入する前に DOMPurify を使用してください)
(重大/高の脆弱性には24時間以内にパッチを適用する必要があります。自動スキャンには Dependabot を使用してください)
(認証トークンには HttpOnly Cookie を使用する必要があります。localStorage や sessionStorage は絶対に使用しないでください)
(セキュリティ上重要なファイルには CODEOWNERS を設定し、セキュリティチームの承認を必須にする必要があります)
</critical_requirements>
自動検出: セキュリティ、シークレット管理、XSS 対策、CSRF 対策、Dependabot、脆弱性スキャン、認証、DOMPurify、CSP ヘッダー、CODEOWNERS、HttpOnly Cookie
使用する場面:
- シークレットを安全に管理する場合(コミットせず、.env.local と CI のシークレットを使用)
- 脆弱性の自動スキャン用に Dependabot を設定する場合
- XSS 攻撃を防止する場合(フレームワークによる自動エスケープ、DOMPurify、CSP ヘッダー)
- セキュリティ上重要なコードに CODEOWNERS を設定する場合
- 安全な認証とトークン保存を実装する場合
使用しない場面:
- 一般的なコード品質レビューの場合(セキュリティ上の懸念ではないため)
- パフォーマンス最適化の場合(別の領域のため)
- CI/CD パイプラインのセットアップの場合(ここで扱うセキュリティパターンはコード向けであり、インフラストラクチャ向けではないため)
- セキュリティレビューによって重大な緊急修正が遅れる場合(後続対応として記録してください)
対象となる主なパターン:
- シークレットをコミットしない(.gitignore、CI のシークレット、四半期ごとのローテーション方針)
- Dependabot による依存関係の自動スキャン(重大な脆弱性には24時間以内に対応)
- XSS 対策(フレームワークによる自動エスケープ、HTML 用の DOMPurify、CSP ヘッダー)
- トークンと SameSite Cookie による CSRF 対策
- セキュリティ上重要な領域(.env.example、認証コード、ワークフロー)への CODEOWNERS の設定
- 安全なトークン保存(HttpOnly Cookie、メモリ内のアクセストークン)
## セキュリティの理念
セキュリティは機能ではなく、基盤です。コードのすべての行を、セキュリティを念頭に置いて記述する必要があります。多層防御とは複数の保護レイヤーを設けることであり、1つが機能しなくても、ほかのレイヤーが攻撃を防ぎます。
セキュリティパターンを使用する場面:
- 常に使用します。セキュリティは任意ではありません
- ユーザー入力を処理するとき(サニタイズと検証を行います)
- シークレットを管理するとき(環境変数、ローテーションを使用します)
- 認証トークンを保存するとき(HttpOnly Cookieを使用します)
- CI/CDを設定するとき(脆弱性スキャン、CODEOWNERSを使用します)
妥協してはいけないこと:
- 本番環境でHTTPSを決して省略しません
- クライアント側の検証だけを決して信頼しません
- リポジトリにシークレットを決してコミットしません
- 機密性の高いトークンにlocalStorageを決して使用しません
- 重要なコードのセキュリティレビューを決して回避しません
基本原則:
- 最小権限:必要最小限のアクセス権を付与します
- 多層防御:複数のセキュリティレイヤーを設けます
- 安全側に失敗する:許可ではなく拒否をデフォルトにします
- ユーザー入力を信頼しない:必ず検証してサニタイズします
- 侵害を前提とする:攻撃が発生した場合(発生するかどうかではなく)に備えます
基本パターン
パターン 1:シークレット管理
シークレットをリポジトリに決してコミットしないでください。開発では.env.local(gitignore対象)の環境変数を使用し、本番環境ではCI/CDのシークレットマネージャーを使用します。シークレットは四半期ごと、またはチームメンバーの離脱時にローテーションします。
シークレットとは
シークレットには、APIキー、トークン、パスワード、データベース認証情報、秘密鍵、証明書、OAuthクライアントシークレット、暗号化キー、JWTシークレットが含まれます。
シークレットの保存場所
開発:
.env.local(gitignore対象)- 開発者ごとのローカル上書き設定
- リポジトリに決してコミットしません
CI/CD:
- GitHub Secrets
- Vercel Environment Variables
- GitLab CI/CD Variables
- その他のプラットフォームのシークレットマネージャー
本番環境:
- 環境変数(プラットフォームから注入)
- シークレット管理サービス(AWS Secrets Manager、HashiCorp Vault)
- コード内にハードコードしません
ローテーションポリシー
注記: NIST SP 800-63-4(2025)は、ユーザーにパスワードの定期的な変更を義務付けることを推奨していません。代わりに、イベントに応じたローテーション(侵害、チームメンバーの離脱、セキュリティインシデントの発生時)を使用してください。サービスアカウントと特権アクセスについては、引き続き定期的なローテーションを推奨します。
| シークレットの種類 | ローテーション頻度 |
|---|---|
| サービスアカウントの認証情報 | 90日(四半期ごと) |
| APIキー | 365日(年1回)、または侵害時 |
| ユーザーパスワード | 侵害時のみ(NIST 2025のガイダンス) |
| 特権アカウントのパスワード | 90日(四半期ごと) |
| 証明書 | 有効期限の30日前に警告 |
| すべてのシークレット | チームメンバーの離脱時に直ちに |
コード例については、examples/core.mdを参照してください。
パターン 2:依存関係のセキュリティ
Dependabotによる自動脆弱性スキャンを有効にし、依存関係のセキュリティ問題を検出します。重大な脆弱性には24時間以内、高リスクの脆弱性には1週間以内、中リスクの脆弱性には1か月以内にパッチを適用します。
更新ポリシー
セキュリティ更新:
- 重大な脆弱性 - 直ちに(24時間以内)
- 高リスクの脆弱性 - 1週間以内
- 中リスクの脆弱性 - 1か月以内
- 低リスクの脆弱性 - 次回の定期更新サイクル
定期更新:
- パッチ更新(1.2.3 -> 1.2.4) - テストに合格した場合、自動マージします
- マイナー更新(1.2.0 -> 1.3.0) - 変更を確認し、テストしてからマージします
- メジャー更新(1.0.0 -> 2.0.0) - 移行を計画し、十分にテストします
Dependabotの設定とCIのセキュリティチェック用スクリプトについては、examples/dependency-security.mdを参照してください。
パターン 3:XSS の防止
最新の UI フレームワークは、デフォルトでユーザー入力を自動エスケープします。DOMPurify でサニタイズしない限り、生の HTML を挿入してこの保護を回避してはいけません。不正なスクリプトをブロックするように、Content Security Policy(CSP)ヘッダーを設定してください。
フレームワークによる自動エスケープ
ほとんどのフレームワークでは、テキストコンテンツが自動的にエスケープされます。明示的な HTML 挿入 API(例:dangerouslySetInnerHTML、v-html、{@html})のみがこの保護を回避します。
DOMPurify によるサニタイズ
HTML のレンダリングが必要な場合は、許可するタグと属性のホワイトリストを指定して DOMPurify を使用してください。
Content Security Policy
XSS が発生した場合でも不正なスクリプトの実行を防ぐため、CSP ヘッダーを設定してください。
DOMPurify と CSP のコード例については、examples/xss-prevention.md を参照してください。
OWASP Top 10:2025 の対象範囲
このスキルは、以下の OWASP Top 10:2025 のカテゴリに対応しています。
| OWASP カテゴリ | 対応内容 |
|---|---|
| A01: アクセス制御の不備 | CODEOWNERS、ブランチ保護、レート制限 |
| A02: セキュリティ設定のミス | CSP ヘッダー、セキュリティヘッダー、Dependabot |
| A03: ソフトウェアサプライチェーンの障害 | Dependabot、CI セキュリティ監査、依存関係のレビュー |
| A04: 暗号化の失敗 | HttpOnly/Secure Cookie、HTTPS の強制 |
| A05: インジェクション | DOMPurify、フレームワークによる自動エスケープ、CSP |
| A07: 認証の失敗 | HttpOnly Cookie、セッション管理 |
| A10: 例外的な状況の不適切な処理 | フェイルセキュアの原則、エラー処理 |
多層防御のレイヤー:
- シークレット:.env.local(開発) -> CI シークレット -> 環境変数(本番環境)
- XSS:フレームワークによる自動エスケープ -> DOMPurify によるサニタイズ -> CSP ヘッダー
- CSRF:トークン -> SameSite Cookie -> サーバー側での検証
- 依存関係:自動スキャン -> CI セキュリティ監査 -> 手動レビュー
<red_flags>
危険信号
優先度の高い問題:
- シークレットをリポジトリにコミットしている(.env ファイル、コード内の API キー)
- サニタイズされていないユーザー入力で生の HTML を挿入している(XSS 攻撃を可能にします)
- 認証トークンを localStorage/sessionStorage に保存している(XSS からアクセスできます)
- 状態を変更する操作に CSRF 対策がない(偽造リクエストを許してしまいます)
- 重大または高深刻度の脆弱性にパッチが適用されていない(悪用可能な状態が続いています)
優先度が中程度の問題:
- Dependabot の設定がない(脆弱性の検出が手動のみです)
- セキュリティ上重要なファイルに CODEOWNERS がない(自動レビューがありません)
- CSP ヘッダーが設定されていない(スクリプト実行の制御がありません)
- チームではなく個人を CODEOWNERS に指定している(単一障害点になります)
- クライアント側の検証のみを信頼している(簡単に回避できます)
- 内部エラーの詳細をユーザーに公開している(情報漏えいにつながります)
注意点とエッジケース:
.env.localは一部のフレームワークではデフォルトで gitignore されていますが、すべてではありません。.gitignoreを確認してください- DOMPurify のデフォルト設定では
<style>タグと<form>タグが許可されます。明示的なホワイトリストを使用してください - SameSite=Strict は正当なクロスサイトリクエストをブロックします。一般的なセッション Cookie には Lax を使用してください
- CSP の nonce はリクエストごとに一意である必要があります。サーバー側で新しい nonce を生成してください
- X-XSS-Protection ヘッダーは非推奨です。「0」に設定するか省略し、代わりに CSP を使用してください
よくある間違い、コード例付きのアンチパターン、判断のためのフレームワークについては、reference.md を参照してください。
</red_flags>
<critical_reminders>
重要な注意事項
すべてのコードは、CLAUDE.md のプロジェクト規約に従う必要があります。
(リポジトリにシークレットを絶対にコミットしないでください。必ず .env.local と CI のシークレットのみを使用してください)
(生の HTML をレンダリングする前に、ユーザー入力をすべてサニタイズする必要があります。HTML を挿入する前に必ず DOMPurify を使用してください)
(重大度が Critical または High の脆弱性は、必ず 24 時間以内に修正してください。自動スキャンには Dependabot を使用してください)
(認証トークンには必ず HttpOnly Cookie を使用してください。localStorage または sessionStorage は絶対に使用しないでください)
(セキュリティ上重要なファイルには必ず CODEOWNERS を設定し、セキュリティチームの承認を必須にしてください)
これらのルールに従わないと、XSS 攻撃、トークンの窃取、CSRF 攻撃、データ漏えいにつながるセキュリティ脆弱性が発生します。
</critical_reminders>