メインコンテンツへスキップ

セキュリティに焦点を当てたパイプラインが必要な理由

一般的なコードレビューはスタイルやバグを検出します。しかし、セキュリティの脆弱性(SQLインジェクション、ハードコードされたシークレット、安全でない認証パターン)には、結果を重大なブロッカーとして扱う専用のルールが必要です。 このクックブックは、既存のレビューの上にセキュリティファーストのレイヤーを設定します。

ステップ1 — セキュリティ分析を有効にする

セキュリティ分析が有効になっていることを確認します:
reviewOptions:
  security: true
これによりKodusの組み込みセキュリティチェックが使用できます。以下のルールは、その上にチームの固有のセキュリティポリシーを追加します。

ステップ2 — OWASPに焦点を当てたルールを作成する

SQLインジェクション防止

Name: 生のSQLクエリは禁止
Scope: File
Paths: **/*.ts, **/*.js, **/*.py
Severity: Critical
Instructions:
  SQLクエリを構築するために文字列連結またはテンプレートリテラルを
  使用している箇所にフラグを立てる。以下のパターンを探す:
  - `query("SELECT ... " + variable)`
  - `query(\`SELECT ... ${variable}\`)`
  - `execute(f"SELECT ... {variable}")`
  パラメータ化クエリまたはORMを使用する必要がある。

ハードコードされたシークレットの検出

Name: ハードコードされたシークレットまたは認証情報は禁止
Scope: File
Paths: **/*
Severity: Critical
Instructions:
  fileDiffでAPIキー、パスワード、トークン、またはシークレットのような
  文字列にフラグを立てる。検出するパターン:
  - 文字列リテラルに割り当てられた *_KEY、*_SECRET、*_TOKEN、*_PASSWORD
    という名前の変数
  - "sk_live_"、"ghp_"、"AKIA"、"Bearer " に続く長い文字列
    のパターンに一致する文字列
  - パスワードが埋め込まれた接続文字列
  シークレットは環境変数またはボールトから取得する必要がある。

認証バイパス

Name: 認証ミドルウェアをスキップしてはならない
Scope: Pull Request
Severity: Critical
Instructions:
  pr_files_diffで認証ミドルウェアなしでユーザーデータを
  処理するルートまたはコントローラーを確認する。以下を探す:
  - @UseGuards、@Authenticated、または同等のデコレータが
    ない新しいルート
  - skipAuth: true のようなミドルウェアバイパスパターン
  - ユーザー固有データにアクセスするパブリックエンドポイント
  承認された認証パターンについては
  @file:src/shared/auth/guards/ を参照する。

XSS防止

Name: サニタイズなしのdangerouslySetInnerHTMLは禁止
Scope: File
Paths: **/*.tsx, **/*.jsx
Severity: Critical
Instructions:
  fileDiffでdangerouslySetInnerHTMLの使用にフラグを立てる。
  使用する場合は、入力がDOMPurifyまたは同等のライブラリで
  サニタイズされていることを確認する。サニタイズされていない
  HTMLインジェクションは重大なXSS脆弱性である。

ステップ3 — セキュリティのMemoriesを教える

どこでも適用される永続的な規約を作成します:
@kody remember: すべてのユーザー入力は使用前に検証および
サニタイズする必要がある。クライアントサイドのデータは決して信頼しない。
@kody remember: 機密データを扱うすべてのAPIエンドポイントは
HTTPSのみを使用し、レート制限を含める必要がある。
@kody remember: エラーメッセージはスタックトレース、内部パス、
またはデータベースの詳細をクライアントに公開してはならない。

ステップ4 — ゼロトレランスを設定する

セキュリティルールでは、重大な結果をブロックする設定が必要です:
  1. PRワークフロー設定で 変更をリクエスト を有効にして、重大な問題が見つかったときにKodyが変更をリクエストするようにする
  2. セキュリティルールを 重大 重要度に設定して、重要度フィルターの上に常に表示されるようにする
  3. maxSuggestions を低い値に設定しない — セキュリティの結果は抑制されるべきではない

ステップ5 — 依存関係監査ルールを追加する(オプション)

MCPプラグインを使用している場合は、依存関係を確認できます:
Name: 既知の脆弱性のある依存関係は禁止
Scope: Pull Request
Severity: Critical
Instructions:
  pr_files_diffがpackage.json、requirements.txt、または
  その他の依存関係ファイルを変更した場合、@MCPを使用して
  追加または更新されたパッケージの既知の脆弱性を確認する。
  既知の重大なCVEを持つ依存関係にフラグを立てる。

チェックリスト

  • reviewOptionsでセキュリティ分析が有効になっている
  • SQLインジェクションルールがDB操作コードをすべてカバーしている
  • シークレット検出ルールがすべてのファイルタイプをカバーしている
  • 認証バイパスルールが実際の認証パターンを参照している
  • XSSルールがすべてのフロントエンドコンポーネントファイルをカバーしている
  • セキュリティのMemoriesが一般的なセキュアコーディング原則を教えている
  • 重大な結果に対して「変更をリクエスト」が有効になっている
  • テストPRでルールが正しく発火することが確認された
ルールの設定の詳細については、Kodyルール を参照してください。