typescript-security-review
TypeScript/Node.js アプリケーションのセキュリティレビューを実施し、XSS・インジェクション・CSRF・JWT/OAuth2 の欠陥・依存関係の CVE・シークレット漏洩などを検証します。セキュリティ監査の実施、デプロイ前の確認、認証/認可の実装レビュー、または Express・NestJS・Next.js における OWASP 準拠の確保が必要な場面で活用してください。「security review」「check for security issues」「TypeScript security audit」などの指示で起動します。
description の原文を見る
Provides security review capability for TypeScript/Node.js applications, validates code against XSS, injection, CSRF, JWT/OAuth2 flaws, dependency CVEs, and secrets exposure. Use when performing security audits, before deployment, reviewing authentication/authorization implementations, or ensuring OWASP compliance for Express, NestJS, and Next.js. Triggers on "security review", "check for security issues", "TypeScript security audit".
SKILL.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 のデータ取り扱い要件)
手順
-
スコープの特定: レビュー対象のファイルとモジュールを決定します。認証、認可、データ処理、API エンドポイント、設定ファイルを優先します。
grepを使ってセキュリティに関連するパターン(eval、exec、innerHTML、パスワード処理、JWT 操作)を探します。チェックポイント: 進める前に、少なくとも 3 つのセキュリティに関連したファイル/モジュールが特定されていることを確認してください。
-
認証・認可の確認: JWT 実装(署名アルゴリズム、有効期限、リフレッシュトークン)、OAuth2/OIDC 統合、セッション管理、パスワードハッシング(bcrypt/argon2)、多要素認証を確認します。保護されたルートが認証を強制していることを確認してください。
チェックポイント:
grepを使ってすべてのルートハンドラーに認証ガードまたはミドルウェアが適用されていることを確認してください。 -
インジェクション脆弱性のスキャン: データベースクエリの SQL/NoSQL インジェクション、
exec/spawnでのコマンドインジェクション、テンプレートインジェクション、LDAP インジェクションをチェックします。パラメータ化クエリと入力検証を確認してください。チェックポイント:
grepを使ってすべてのデータベースクエリがパラメータ化を使用していることを確認してください — ユーザー入力との文字列連結がないことを確認します。 -
入力検証の確認: API 入力が Zod、Joi、class-validator で検証されていることをチェックします。スキーマの完全性を確認します — 適切な型制約、長さ制限、フォーマット検証。検証バイパス経路がないことをチェックします。
チェックポイント: すべてのパブリック API エンドポイントに対応する検証スキーマがあることを確認してください。
-
XSS 対策の評価: React コンポーネントの
dangerouslySetInnerHTMLの使用をレビューします。Content Security Policy ヘッダーを確認します。ユーザー生成コンテンツの HTML サニタイゼーションを確認します。詳細なパターンについてはreferences/xss-prevention.mdを参照してください。チェックポイント:
grepを使ってすべてのdangerouslySetInnerHTMLの使用に DOMPurify またはそれと同等のサニタイゼーションがあることを確認してください。 -
シークレット管理の確認: ハードコードされた認証情報、API キー、ソースコード内のシークレットをスキャンします。
.envファイルが gitignored されていることを確認します。シークレットが適切な管理サービスを通じてアクセスされていることを確認します。チェックポイント:
grep -r "password\|secret\|api.*key\|token" --include="*.ts"を実行して、コード内の潜在的なシークレットを特定します。 -
依存関係のセキュリティ確認:
npm auditを実行するか、既知の脆弱性についてpackage-lock.jsonをチェックします。CVE を持つ古い依存関係を特定します。不要な依存関係をチェックします。チェックポイント:
npm auditの結果が確認されていることを確認し、重大な脆弱性が対処されていることを確認してください。 -
セキュリティヘッダーと設定の評価: helmet.js またはセキュリティヘッダーの手動設定を確認します。CORS ポリシー、レート制限、HTTPS 強制、クッキーセキュリティフラグ(HttpOnly、Secure、SameSite)、CSP をレビューします。設定例については
references/security-headers.mdを参照してください。チェックポイント:
grepを使って helmet またはそれと同等のセキュリティヘッダーがグローバルに適用されていることを確認してください。 -
セキュリティレポートの作成: 重要度で分類された検出事項、コード例を含む改善ガイダンス、セキュリティ体制のサマリーを含む構造化レポートを生成します。
フィードバックループ: Critical または High の脆弱性が見つかった場合、最終化する前に関連モジュールをスキャンして同様のパターンがないか確認します。
grepを使用して、同じ脆弱性パターンが他の場所に存在するかどうかを特定します。
例
JWT セキュリティレビュー
// ❌ Critical: JWT の設定が不適切
import jwt from 'jsonwebtoken';
const SECRET = 'mysecret123'; // ハードコードされた弱いシークレット
function generateToken(user: User) {
return jwt.sign({ id: user.id, role: user.role }, SECRET);
// 有効期限なし、弱いシークレット、アルゴリズム指定なし
}
// ✅ Secure: 適切な JWT 設定
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 }, // 最小限のクレーム、機密データなし
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'], // 受け入れ可能なアルゴリズムを制限
issuer: 'my-app',
audience: 'my-app-client',
}) as JwtPayload;
}
SQL インジェクション対策
// ❌ Critical: SQL インジェクション脆弱性
async function findUser(email: string) {
const result = await db.query(
`SELECT * FROM users WHERE email = '${email}'`
);
return result.rows[0];
}
// ✅ Secure: パラメータ化クエリ
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(Drizzle の例)
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. Critical 脆弱性(即座に対応)
システムの侵害、データ盗難、または不正アクセスを引き起こすために悪用される可能性がある問題。
3. High 優先度(30 日以内に対応)
セキュリティの設定ミス、保護の不足、または短期的な改善が必要な脆弱性。
4. Medium 優先度(90 日以内に対応)
セキュリティ体制を低下させるが、軽減要因または限定的な悪用可能性がある問題。
5. Low 優先度(次のサイクル)
セキュリティ改善、強化推奨事項、および多層防御の強化。
6. 優れたセキュリティ実装の観察
よく実装されたセキュリティパターンとプラクティスの確認。
7. 改善ロードマップ
最も重要な修正のコード例を含む優先順位付きアクションアイテム。
ベストプラクティス
- API の境界ですべての入力を検証します — クライアント側検証だけを信じてはいけません
- パラメータ化クエリまたは ORM を使用します — ユーザー入力をクエリに連結してはいけません
- シークレットを環境変数またはシークレット管理サービスに保存します — ソースコードに含めてはいけません
- データベースアカウント、API キー、IAM ロールに対して最小権限の原則を適用します
- セキュリティヘッダー(helmet.js)を有効にし、CORS を既知のオリジンに制限します
- すべてのパブリックエンドポイントにレート制限を実装します
- bcrypt または argon2 でパスワードをハッシング化します — パスワードに MD5/SHA を使用してはいけません
- クッキーフラグを設定します:
HttpOnly、Secure、SameSite=Strict - CI パイプラインで
npm auditを使用して依存関係の脆弱性を検出します - セキュリティイベント(ログイン失敗、権限否認)をログに記録します。ただし機密データはログに記録しません
制約と警告
- セキュリティレビューは専門的なペネトレーションテストの代替ではありません
- コードレベルの脆弱性に焦点を当てます — インフラストラクチャセキュリティは範囲外です
- プロジェクトのフレームワークを尊重します — フレームワーク固有の改善ガイダンスを提供します
- 発見されたシークレットをログ出力、印刷、公開しません — その場所のみを報告します
- 依存関係の脆弱性は、単なる存在ではなく実際の悪用可能性について評価します
- セキュリティ推奨事項は実用的である必要があります — 実装努力対リスク削減を考慮してください
参考資料
詳細なセキュリティドキュメントについては references/ ディレクトリを参照してください:
references/owasp-typescript.md— OWASP Top 10 の TypeScript/Node.js パターンへのマッピング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 を使用した入力検証パターン
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- giuseppe-trisciuoglio
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/giuseppe-trisciuoglio/developer-kit / ライセンス: MIT
関連スキル
doubt-driven-development
重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。
apprun-skills
TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。
desloppify
コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。
debugging-and-error-recovery
テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。
test-driven-development
テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。
incremental-implementation
変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。