secure-coding-practices について
ソフトウェアの開発やレビューに取り組む開発者とチーム向けの、セキュアコーディング支援スキルです。入力検証、認証、暗号化、依存関係、エラー処理などの防御策を、参照資料とチェックリストで整理しています。
主な機能
- 01セキュリティ原則とワークフロー
- 02分野別の参照ガイド
- 03実装チェックリスト
- 04高リスクなコードパターンの確認
- 05依存関係と秘密情報の指針
活用シーン
- 01認証やセッションのコードをレビュー
- 02入力を検証し機密データを保護
- 03コードレビューで依存関係を評価
- 04チームのセキュア開発基準を策定
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ nickcrew/ claude-cortex --skill secure-coding-practicesインストール後、Claude Code で/secure-coding-practicesを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/authentication.mdcryptography.mddependencies.mderror-handling.mdinput-validation.mdoutput-encoding.mdsecure-defaults.mdvalidation/rubric.yaml詳細
セキュアなコーディングの実践
防御的プログラミング手法と、積極的な脅威軽減戦略を用いた、セキュリティを最優先する開発パターンの包括的なガイダンスです。
このスキルを使う場面
- 認証および認可システムを実装するとき
- ユーザー入力または外部データを処理するとき
- 機密データ(PII、認証情報、金融情報)を扱うとき
- API およびウェブサービスを構築するとき
- 暗号処理(ハッシュ化、暗号化)を管理するとき
- セキュリティに重点を置いたコードレビューを実施するとき
- チーム向けのセキュアな開発標準を策定するとき
- サードパーティの依存関係やライブラリを評価するとき
- エラー処理およびログ記録の戦略を設計するとき
- セッション管理およびトークン処理を実装するとき
セキュリティの基本原則
多層防御
セキュリティ制御を複数の層に適用します。単一の保護メカニズムだけに頼らないでください。
セキュアな状態で失敗させる
エラーが発生した場合は、セキュアな状態(アクセスを拒否し、入力を拒否し、イベントを記録する)をデフォルトにします。
最小権限
必要最小限の権限を付与します。ユーザー、サービス、データベースには、必要なアクセス権のみを与えてください。
何も信頼しない
すべての入力を検証し、すべての出力をエンコードし、すべての情報源を確認し、すべてのリクエストを認証します。
クイックリファレンス
| タスク | 参照資料を読み込む |
|---|---|
| 入力の検証とサニタイズ | skills/secure-coding-practices/references/input-validation.md |
| 出力のエンコードと XSS の防止 | skills/secure-coding-practices/references/output-encoding.md |
| 認証とセッション | skills/secure-coding-practices/references/authentication.md |
| 暗号化と鍵管理 | skills/secure-coding-practices/references/cryptography.md |
| 依存関係とサプライチェーン | skills/secure-coding-practices/references/dependencies.md |
| エラー処理とログ記録 | skills/secure-coding-practices/references/error-handling.md |
| セキュアなデフォルト設定と構成 | skills/secure-coding-practices/references/secure-defaults.md |
ワークフロー
- セキュリティ要件を特定する - 認証、認可、データ保護、コンプライアンス
- 関連する参照資料を読み込む - クイックリファレンスの表から、該当するガイダンスを探します
- セキュリティ制御を実装する - 適切なコンテキストで、参照資料のパターンを適用します
- 実装を検証する - セキュリティスキャナー、侵入テスト、コードレビューでテストします
- 監視して保守する - 定期的なセキュリティ監査、依存関係の更新、脆弱性スキャンを実施します
セキュリティチェックリスト
入力の検証:
- 許可リストを使い、すべてのユーザー入力をサーバー側で検証する
- スキーマ検証ライブラリ(Joi、Yup、Zod)を使用する
- 厳密な型チェックを実施する
- ファイルパスをサニタイズし、パストラバーサルを防止する
出力のエンコード:
- コンテキストに応じたエンコード(HTML、JS、URL、SQL)を適用する
- 自動エスケープ機能を備えたテンプレートエンジンを使用する
- コンテンツセキュリティポリシー(CSP)を実装する
- セキュアな HTTP ヘッダー(Helmet.js)を設定する
認証と認可:
- bcrypt/Argon2 でパスワードをハッシュ化する(ソルトラウンド ≥12)
- セキュアなセッション管理を実装する
- HttpOnly および SameSite を指定した HTTPS 専用の Cookie を使用する
- 認証エンドポイントにレート制限を適用する
- すべてのリクエストで認可を検証する
暗号化:
- 暗号化に AES-256-GCM を使用する
- crypto.randomBytes() で鍵を生成する
- シークレットを環境変数または KMS に保存する
- 独自の暗号方式を実装しない
依存関係:
- npm audit を定期的に実行する
- package.json で依存関係のバージョンを固定する
- 監視に Snyk/Dependabot を使用する
- パッケージの完全性を検証する(CDN の場合は SRI)
エラー処理とログ記録:
- ユーザーには一般的なエラーメッセージを返す
- 相関 ID を付けてエラーを記録する
- パスワード、トークン、PII を絶対に記録しない
- セキュリティイベントとアラートを監視する
よくある間違い
- クライアント側の検証だけを防御策として使用する(必ずサーバー側でも検証してください)
- 許可リストではなく拒否リストを使用する(禁止事項ではなく、許可する内容を定義してください)
- スタックトレースや内部エラーをユーザーに公開する
- ソースコードにシークレットをハードコードする
- セキュリティ上重要な処理で Math.random() を使用する
- 認証エンドポイントにレート制限を実装しない
- 緩い等価比較によって型強制攻撃を許す
- データベースクエリでユーザー入力を信頼する(SQL インジェクション)
- コンテキストに応じた出力エンコーディングが不足している(XSS の脆弱性)
- パスワードハッシュ化が不十分(弱いアルゴリズムまたは低いワークファクター)
リスクの高いコードパターン
コードレビューでは、次のパターンに注意してください。
- SQL クエリでの文字列連結(インジェクションのリスク)
- ユーザー入力からのファイルパスの直接構築(パストラバーサルのリスク)
- ユーザー入力を使った eval()、Function()、または exec()(コードインジェクション)
- 信頼できないデータのデシリアライズ(RCE のリスク)
- シークレットや認証情報のハードコード(漏えいのリスク)
- 認証/認可チェックの不足(アクセス制御)
- 脆弱な暗号方式(MD5、SHA1、ECB モード)
- 本番環境での詳細すぎるエラーメッセージ(情報漏えい)
- 入力検証の不足(インジェクション、DoS)
- 安全でないセッション設定(セッションハイジャックのリスク)
リソース
OWASP のリソース:
- OWASP Top 10:https://owasp.org/Top10/
- OWASP Cheat Sheet Series:https://cheatsheetseries.owasp.org/
- OWASP ASVS:アプリケーションセキュリティ検証標準
- OWASP Dependency-Check:https://owasp.org/www-project-dependency-check/
標準とガイドライン:
- NIST Cybersecurity Framework:https://www.nist.gov/cyberframework
- NIST SP 800-63B:デジタルアイデンティティガイドライン(認証)
- CWE Top 25:https://cwe.mitre.org/top25/
ツール:
- SAST:SonarQube、Semgrep、CodeQL
- DAST:OWASP ZAP、Burp Suite
- SCA:Snyk、npm audit、Dependabot
- シークレット検出:TruffleHog、git-secrets
コメント
Markdown 対応