typescript-security-review について
TypeScript と Node.js アプリのコード監査やデプロイ前確認に使うセキュリティレビュー用スキルです。一般的な脆弱性を調べ、深い分析は `typescript-security-expert` に委任し、重要度別の指摘と修正案をまとめます。
主な機能
- 01OWASP Top 10 とフレームワーク設定の確認
- 02認証と認可のレビュー
- 03インジェクション、XSS、入力検証の確認
- 04依存関係とシークレット管理のレビュー
- 05重要度別レポートと修正案
活用シーン
- 01TypeScript/Node.js コードベースの監査
- 02JWT、OAuth2、セッションのセキュリティ確認
- 03API の検証とセキュリティヘッダーの点検
- 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.mddependency-security.mdinput-validation.mdowasp-typescript.mdsecurity-headers.mdxss-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 のデータ取り扱い要件)を行うとき
手順
-
対象範囲の特定:レビュー対象のファイルとモジュールを特定します。認証、認可、データ処理、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ファイルが gitignore に含まれていること、適切な管理サービスを通じてシークレットにアクセスしていることを確認します。チェックポイント:
grep -r "password\|secret\|api.*key\|token" --include="*.ts"を実行し、コード内に潜む可能性のあるシークレットを特定します。 -
依存関係のセキュリティレビュー:
npm auditを実行するか、既知の脆弱性がないかpackage-lock.jsonを確認します。CVE が報告されている古い依存関係を特定します。不要な依存関係がないか確認します。チェックポイント:
npm auditの結果がレビューされ、重大な脆弱性に対処済みであることを確認します。 -
セキュリティヘッダーと設定の評価:helmet.js または手動でのセキュリティヘッダー設定を確認します。CORS ポリシー、レート制限、HTTPS の強制、Cookie のセキュリティフラグ(HttpOnly、Secure、SameSite)、CSP をレビューします。設定例については、
references/security-headers.mdを参照してください。チェックポイント:
grepを使い、helmet または同等のセキュリティヘッダーがグローバルに適用されていることを確認します。 -
セキュリティレポートの作成:重大度別に分類した検出事項、コード例を含む修正ガイダンス、セキュリティ態勢の概要を盛り込んだ構造化レポートを作成します。
フィードバックループ: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 10references/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 を使用した入力検証パターン