mcpField
S
secure-coding-practices

secure-coding-practices

github.com/nickcrewセキュリティ62130 回インストール17 週間前に更新
リポジトリ

secure-coding-practices について

ソフトウェアの開発やレビューに取り組む開発者とチーム向けの、セキュアコーディング支援スキルです。入力検証、認証、暗号化、依存関係、エラー処理などの防御策を、参照資料とチェックリストで整理しています。

主な機能

  1. 01セキュリティ原則とワークフロー
  2. 02分野別の参照ガイド
  3. 03実装チェックリスト
  4. 04高リスクなコードパターンの確認
  5. 05依存関係と秘密情報の指針

活用シーン

  1. 01認証やセッションのコードをレビュー
  2. 02入力を検証し機密データを保護
  3. 03コードレビューで依存関係を評価
  4. 04チームのセキュア開発基準を策定

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/nickcrew/claude-cortex --skill secure-coding-practices

インストール後、Claude Code で/secure-coding-practicesを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
authentication.md
cryptography.md
dependencies.md
error-handling.md
input-validation.md
output-encoding.md
secure-defaults.md
validation/
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

ワークフロー

  1. セキュリティ要件を特定する - 認証、認可、データ保護、コンプライアンス
  2. 関連する参照資料を読み込む - クイックリファレンスの表から、該当するガイダンスを探します
  3. セキュリティ制御を実装する - 適切なコンテキストで、参照資料のパターンを適用します
  4. 実装を検証する - セキュリティスキャナー、侵入テスト、コードレビューでテストします
  5. 監視して保守する - 定期的なセキュリティ監査、依存関係の更新、脆弱性スキャンを実施します

セキュリティチェックリスト

入力の検証:

  • 許可リストを使い、すべてのユーザー入力をサーバー側で検証する
  • スキーマ検証ライブラリ(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 の脆弱性)
  • パスワードハッシュ化が不十分(弱いアルゴリズムまたは低いワークファクター)

リスクの高いコードパターン

コードレビューでは、次のパターンに注意してください。

  1. SQL クエリでの文字列連結(インジェクションのリスク)
  2. ユーザー入力からのファイルパスの直接構築(パストラバーサルのリスク)
  3. ユーザー入力を使った eval()、Function()、または exec()(コードインジェクション)
  4. 信頼できないデータのデシリアライズ(RCE のリスク)
  5. シークレットや認証情報のハードコード(漏えいのリスク)
  6. 認証/認可チェックの不足(アクセス制御)
  7. 脆弱な暗号方式(MD5、SHA1、ECB モード)
  8. 本番環境での詳細すぎるエラーメッセージ(情報漏えい)
  9. 入力検証の不足(インジェクション、DoS)
  10. 安全でないセッション設定(セッションハイジャックのリスク)

リソース

OWASP のリソース:

標準とガイドライン:

ツール:

  • SAST:SonarQube、Semgrep、CodeQL
  • DAST:OWASP ZAP、Burp Suite
  • SCA:Snyk、npm audit、Dependabot
  • シークレット検出:TruffleHog、git-secrets

コメント