mcpField
T
typescript-security-review

typescript-security-review

github.com/giuseppe-trisciuoglioセキュリティ3653.9k 回インストール7 週間前に更新
リポジトリ

typescript-security-review について

TypeScript と Node.js アプリのコード監査やデプロイ前確認に使うセキュリティレビュー用スキルです。一般的な脆弱性を調べ、深い分析は `typescript-security-expert` に委任し、重要度別の指摘と修正案をまとめます。

主な機能

  1. 01OWASP Top 10 とフレームワーク設定の確認
  2. 02認証と認可のレビュー
  3. 03インジェクション、XSS、入力検証の確認
  4. 04依存関係とシークレット管理のレビュー
  5. 05重要度別レポートと修正案

活用シーン

  1. 01TypeScript/Node.js コードベースの監査
  2. 02JWT、OAuth2、セッションのセキュリティ確認
  3. 03API の検証とセキュリティヘッダーの点検
  4. 04本番デプロイ前のセキュリティ評価

インストール

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

$npx skills add https://github.com/giuseppe-trisciuoglio/developer-kit --skill typescript-security-review

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

同梱ファイル

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

references/
common-vulnerabilities.md
dependency-security.md
input-validation.md
owasp-typescript.md
security-headers.md
xss-prevention.md

詳細

TypeScript セキュリティレビュー

概要

TypeScript/Node.js アプリケーションのセキュリティレビューです。OWASP Top 10、フレームワーク固有のパターン、本番環境への対応状況に関する基準に照らしてコードを評価します。検出事項は、重大度(Critical、High、Medium、Low)別に分類し、修正例を提示します。詳細な分析は typescript-security-expert エージェントに委任します。

使用するタイミング

  • TypeScript/Node.js のコードベースに対してセキュリティ監査を実施するとき
  • 認証および認可の実装(JWT、OAuth2、Passport.js)をレビューするとき
  • よくある脆弱性(XSS、インジェクション、CSRF、パストラバーサル)の有無を確認するとき
  • 入力検証とサニタイズのロジックを検証するとき
  • 依存関係のセキュリティ(npm audit、既知の CVE)をレビューするとき
  • シークレットの管理と環境変数の処理を確認するとき
  • API のセキュリティ(レート制限、CORS、セキュリティヘッダー)を評価するとき
  • Express、NestJS、Next.js のセキュリティ設定をレビューするとき
  • 本番環境へのデプロイ前、または大幅なコード変更後
  • コンプライアンスチェック(GDPR、HIPAA、SOC2 のデータ取り扱い要件)を行うとき

手順

  1. 対象範囲の特定:レビュー対象のファイルとモジュールを特定します。認証、認可、データ処理、API エンドポイント、設定ファイルを優先します。grepを使って、セキュリティ上重要なパターン(eval、exec、innerHTML、パスワードの処理、JWT 操作)を検索します。

    チェックポイント:続行する前に、セキュリティ上重要なファイル/モジュールを少なくとも3つ特定したことを確認します。

  2. 認証と認可の確認:JWT の実装(署名アルゴリズム、有効期限、リフレッシュトークン)、OAuth2/OIDC 連携、セッション管理、パスワードハッシュ化(bcrypt/argon2)、多要素認証をレビューします。保護対象のルートで認証が必須になっていることを確認します。

    チェックポイント:grepを使い、すべてのルートハンドラーに認証ガードまたはミドルウェアが適用されていることを確認します。

  3. インジェクション脆弱性のスキャン:データベースクエリにおけるSQL/NoSQLインジェクション、exec/spawnにおけるコマンドインジェクション、テンプレートインジェクション、LDAPインジェクションを確認します。パラメーター化クエリと入力検証が使用されていることを確認します。

    チェックポイント:grepを使い、すべてのデータベースクエリでパラメーター化が使用されており、ユーザー入力との文字列連結がないことを確認します。

  4. 入力検証のレビュー:API 入力が Zod、Joi、または class-validator で検証されていることを確認します。スキーマが十分に網羅されているか、適切な型制約、長さ制限、形式検証があるかを確認します。検証を回避できる経路がないかも確認します。

    チェックポイント:すべての公開 API エンドポイントに対応する検証スキーマがあることを確認します。

  5. XSS 対策の評価:React コンポーネントでdangerouslySetInnerHTMLが使用されているか確認し、Content Security Policy ヘッダーをチェックし、ユーザー生成コンテンツが HTML サニタイズされていることを確認します。詳細なパターンについては、references/xss-prevention.mdを参照してください。

    チェックポイント:grepを使い、dangerouslySetInnerHTMLの使用箇所があれば、DOMPurify または同等の方法でサニタイズされていることを確認します。

  6. シークレット管理の確認:ソースコードにハードコードされた認証情報、API キー、シークレットがないかスキャンします。.envファイルが gitignore に含まれていること、適切な管理サービスを通じてシークレットにアクセスしていることを確認します。

    チェックポイント:grep -r "password\|secret\|api.*key\|token" --include="*.ts"を実行し、コード内に潜む可能性のあるシークレットを特定します。

  7. 依存関係のセキュリティレビュー:npm auditを実行するか、既知の脆弱性がないかpackage-lock.jsonを確認します。CVE が報告されている古い依存関係を特定します。不要な依存関係がないか確認します。

    チェックポイント:npm auditの結果がレビューされ、重大な脆弱性に対処済みであることを確認します。

  8. セキュリティヘッダーと設定の評価:helmet.js または手動でのセキュリティヘッダー設定を確認します。CORS ポリシー、レート制限、HTTPS の強制、Cookie のセキュリティフラグ(HttpOnly、Secure、SameSite)、CSP をレビューします。設定例については、references/security-headers.mdを参照してください。

    チェックポイント:grepを使い、helmet または同等のセキュリティヘッダーがグローバルに適用されていることを確認します。

  9. セキュリティレポートの作成:重大度別に分類した検出事項、コード例を含む修正ガイダンス、セキュリティ態勢の概要を盛り込んだ構造化レポートを作成します。

    フィードバックループ:Critical または High の脆弱性が見つかった場合は、最終確定する前に関連モジュールを再スキャンし、類似パターンがないか確認します。grepを使って、同じ脆弱性パターンがほかの場所にも存在するか特定します。

例

JWT セキュリティレビュー
// ❌ Critical: Weak JWT configuration
import jwt from 'jsonwebtoken';

const SECRET = 'mysecret123'; // Hardcoded weak secret

function generateToken(user: User) {
  return jwt.sign({ id: user.id, role: user.role }, SECRET);
  // Missing expiration, weak secret, no algorithm specification
}

// ✅ Secure: Proper JWT configuration
import jwt from 'jsonwebtoken';

const JWT_SECRET = process.env.JWT_SECRET;
if (!JWT_SECRET || JWT_SECRET.length < 32) {
  throw new Error('JWT_SECRET must be set and at least 32 characters');
}

function generateToken(user: User): string {
  return jwt.sign(
    { sub: user.id }, // Minimal claims, no sensitive data
    JWT_SECRET,
    {
      algorithm: 'HS256',
      expiresIn: '15m',
      issuer: 'my-app',
      audience: 'my-app-client',
    }
  );
}

function verifyToken(token: string): JwtPayload {
  return jwt.verify(token, JWT_SECRET, {
    algorithms: ['HS256'], // Restrict accepted algorithms
    issuer: 'my-app',
    audience: 'my-app-client',
  }) as JwtPayload;
}
SQL インジェクション対策
// ❌ Critical: SQL injection vulnerability
async function findUser(email: string) {
  const result = await db.query(
    `SELECT * FROM users WHERE email = '${email}'`
  );
  return result.rows[0];
}

// ✅ Secure: Parameterized query
async function findUser(email: string) {
  const result = await db.query(
    'SELECT id, name, email FROM users WHERE email = $1',
    [email]
  );
  return result.rows[0];
}

// ✅ Secure: ORM with type-safe queries (Drizzle example)
async function findUser(email: string) {
  return db.select({
    id: users.id,
    name: users.name,
    email: users.email,
  })
  .from(users)
  .where(eq(users.email, email))
  .limit(1);
}

XSS のパターンについてはreferences/xss-prevention.mdを、セキュリティヘッダーの設定についてはreferences/security-headers.mdを参照してください。

レビュー出力形式

セキュリティレビューの検出事項は、すべて次の形式でまとめてください。

1. セキュリティ態勢の概要

主要な所見とリスクレベルを含む、全体的なセキュリティ評価スコア(1~10)。

2. 重大な脆弱性(即時対応)

システムの侵害、データの窃取、または不正アクセスにつながる形で悪用できる問題。

3. 優先度が高い項目(30日以内に対応)

セキュリティ設定の不備、保護策の欠如、または早急な修正が必要な脆弱性。

4. 中優先度(90 日以内に対応)

セキュリティ態勢を低下させるものの、緩和要因がある、または悪用可能性が限られている問題です。

5. 低優先度(次のサイクル)

セキュリティの改善、強化に関する推奨事項、多層防御の強化です。

6. セキュリティ上の好ましい点

評価に値する、適切に実装されたセキュリティパターンとプラクティスです。

7. 修正ロードマップ

最も重大な問題に対処するための、コード例を含む優先順位付きアクション項目です。

ベストプラクティス

  • API 境界ですべての入力を検証してください。クライアント側の検証だけを決して信頼しないでください
  • パラメーター化クエリまたは ORM を使用してください。クエリにユーザー入力を決して連結しないでください
  • シークレットは環境変数またはシークレットマネージャーに保存してください。ソースコードに決して記述しないでください
  • データベースアカウント、API キー、IAM ロールには最小権限の原則を適用してください
  • セキュリティヘッダー(helmet.js)を有効にし、CORS を既知のオリジンに制限してください
  • すべての公開エンドポイントにレート制限を実装してください
  • パスワードは bcrypt または argon2 でハッシュ化してください。パスワードに MD5/SHA を決して使用しないでください
  • Cookie フラグを設定してください:HttpOnly、Secure、SameSite=Strict
  • 依存関係の脆弱性を検出するため、CI パイプラインで npm audit を使用してください
  • 機密データを記録せずに、セキュリティイベント(ログイン失敗、権限拒否)をログに記録してください

制約と警告

  • セキュリティレビューは、専門家によるペネトレーションテストの代わりにはなりません
  • コードレベルの脆弱性に焦点を当ててください。インフラストラクチャのセキュリティは対象外です
  • プロジェクトのフレームワークを尊重し、フレームワーク固有の修正ガイダンスを提示してください
  • 発見したシークレットをログに記録、出力、公開しないでください。場所のみを報告してください
  • 依存関係の脆弱性は、存在の有無だけでなく、実際に悪用可能かどうかを評価してください
  • セキュリティに関する推奨事項は実用的なものにしてください。実装にかかる労力とリスク低減を考慮してください

参考資料

詳しいセキュリティドキュメントについては、references/ ディレクトリを参照してください:

  • references/owasp-typescript.md — TypeScript/Node.js のパターンに対応する OWASP Top 10
  • references/common-vulnerabilities.md — 一般的な脆弱性のパターンと修正方法
  • references/dependency-security.md — 依存関係のスキャンとサプライチェーンセキュリティ
  • references/xss-prevention.md — React およびサーバーサイドでの XSS 防止パターン
  • references/security-headers.md — セキュリティヘッダーと CORS の設定例
  • references/input-validation.md — Zod および class-validator を使用した入力検証パターン

コメント