owasp-top-10 について
アプリケーションのセキュリティを確認する開発者向けに、OWASP Top 10:2025 のリスクと予防策をまとめたスキルです。10 分野の早見表、例、スキャンコマンド、トラブルシューティングを収録しています。
主な機能
- 012025 年版の 10 分野を網羅
- 02予防策とコード例を掲載
- 03セキュリティスキャンコマンドを紹介
- 04リスク対策チェックリストを収録
- 05トラブルシューティングとアンチパターンを説明
活用シーン
- 01アプリケーションのセキュリティリスク確認
- 02アクセス制御と認証の実践状況の確認
- 03依存関係とインジェクション対策の監査
- 04一般的なセキュリティ問題の修正策の調査
MCP 対応
包括的なドキュメント取得に `mcp__documentation__fetch_docs` を `owasp` の技術指定で使う方法が記載されています。
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ claude-dev-suite/ claude-dev-suite --skill owasp-top-10インストール後、Claude Code で/owasp-top-10を入力して読み込まれたか確認します。
詳細
OWASP Top 10:2025
このスキルを使用しない場合
- OWASP Top 10:2021 - 2021 年版には
owaspスキルを使用してください - 詳細なシークレット管理 -
secrets-managementスキルを使用してください - 詳細なサプライチェーンセキュリティ - 依存関係管理の詳細については
supply-chainスキルを使用してください - ライセンスコンプライアンス -
license-complianceスキルを使用してください
深い知識:包括的なドキュメントについては、テクノロジーに
owaspを指定してmcp__documentation__fetch_docsを使用してください。
クイックリファレンス
| 順位 | カテゴリー | 防止策 |
|---|---|---|
| A01 | アクセス制御の不備 | 認可チェック、デフォルトで拒否 |
| A02 | セキュリティ設定ミス | 強化、セキュリティヘッダー、デフォルト設定を使用しない |
| A03 | サプライチェーンの障害 | 依存関係の監査、ロックファイル、SBOM |
| A04 | 暗号化の不備 | 強力なアルゴリズム、適切な鍵管理 |
| A05 | インジェクション | パラメーター化クエリ、入力検証 |
| A06 | 安全でない設計 | 脅威モデリング、安全なパターン |
| A07 | 認証の不備 | MFA、レート制限、安全なセッション |
| A08 | 完全性の不備 | 署名付き更新、安全なデシリアライズ |
| A09 | ログ記録の不備 | 監査ログ、アラート、監視 |
| A10 | 例外処理 | 適切なエラー処理、情報漏えいの防止 |
A01: アクセス制御の不備
// Always verify ownership
if (resource.userId !== currentUser.id) {
throw new ForbiddenException();
}
// Deny by default
const allowed = permissions.includes(requiredPermission);
if (!allowed) throw new ForbiddenException();
// Rate limit sensitive endpoints
app.use('/api/admin/*', adminRateLimiter);
A02: セキュリティ設定ミス
// Security headers
import helmet from 'helmet';
app.use(helmet());
// Strict CORS
app.use(cors({
origin: ['https://myapp.com'],
credentials: true
}));
// Hide errors in production
if (process.env.NODE_ENV === 'production') {
app.use((err, req, res, next) => {
res.status(500).json({ error: 'Internal error' });
});
}
A03: サプライチェーンの障害(2025 年の新項目)
# Audit dependencies
npm audit
pip-audit
mvn dependency-check:check
# Use lockfiles
npm ci # Instead of npm install
# Verify package integrity
npm install --ignore-scripts
npm config set ignore-scripts true
A04: 暗号化の不備
// Strong password hashing
import { hash, verify } from 'argon2';
const hashed = await hash(password, { type: argon2id });
// Secure random
import { randomBytes, randomUUID } from 'crypto';
const token = randomBytes(32).toString('hex');
// AES-256-GCM for encryption (not CBC)
A05: インジェクション
// SQL - use parameterized queries
const user = await prisma.user.findUnique({ where: { id } });
await db.query('SELECT * FROM users WHERE id = $1', [id]);
// Command - use execFile, not exec
import { execFile } from 'child_process';
execFile('ls', ['-la', safeArg]);
// XSS - sanitize HTML
import DOMPurify from 'dompurify';
element.innerHTML = DOMPurify.sanitize(userInput);
A06: 安全でない設計
主な実践事項:
- 設計段階での脅威モデリング
- 安全な設計パターン(フェイルセーフ、多層防御)
- ユーザーストーリーにおけるセキュリティ要件
- 悪用ケースのテスト
A07: 認証の不備
// Rate limiting
import rateLimit from 'express-rate-limit';
const loginLimiter = rateLimit({
windowMs: 15 * 60 * 1000,
max: 5
});
// Secure cookies
res.cookie('session', token, {
httpOnly: true,
secure: true,
sameSite: 'strict'
});
// Strong passwords (12+ chars, mixed)
A08: 完全性の不備
// Verify signatures on updates
// Use subresource integrity (SRI)
<script src="lib.js"
integrity="sha384-..."
crossorigin="anonymous">
</script>
// Safe deserialization
// Avoid: JSON.parse(untrusted)
// Use: zod/yup validation
A09: ログ記録とアラートの不備
// Log security events
logger.warn({
event: 'auth_failure',
userId: attemptedId,
ip: req.ip,
timestamp: new Date().toISOString()
});
// Events to log:
// - Login success/failure
// - Password changes
// - Permission denied
// - Rate limit exceeded
A10: 例外処理(2025 年の新項目)
// Graceful error handling
try {
await riskyOperation();
} catch (error) {
logger.error({ error, context });
// Generic response to user
throw new InternalServerException('Operation failed');
}
// Never expose stack traces
// Never expose internal paths
// Never expose SQL/DB errors
セキュリティスキャンコマンド
# Dependencies
npm audit --json
snyk test
# Secrets
gitleaks detect
trufflehog git file://.
# SAST
semgrep --config=p/security-audit .
# Docker
trivy image myimage:latest
チェックリスト
| リスク | 防止策 |
|---|---|
| SQL インジェクション | パラメーター化クエリ、ORM |
| XSS | 出力のエスケープ、CSP ヘッダー |
| CSRF | CSRF トークン、SameSite Cookie |
| 認証の問題 | MFA、レート制限、安全なセッション |
| シークレット | 環境変数、ボールト |
| サプライチェーン | 監査、ロックファイル、SBOM |
アンチパターン
| アンチパターン | 問題点 | 正しい方法 |
|---|---|---|
| フロントエンドだけで権限を確認する | クライアント側で回避される(A01) | 必ずバックエンドで検証する |
| 弱い暗号(MD5、DES)を使用する | 簡単に破られる(A04) | AES-256-GCM、argon2、SHA-256 以上を使用する |
CI/CD で npm install を実行する | ビルドが再現可能でない(A03) | ロックファイルとともに npm ci を使用する |
| すべての例外を黙って捕捉する | セキュリティ上の問題が隠れる(A10) | エラーをログに記録し、適切に処理する |
| クエリ内のユーザー入力を信頼する | インジェクション攻撃(A05) | 必ずパラメーター化クエリを使用する |
| セッションタイムアウトがない | セッションハイジャック(A07) | アイドル時と絶対時間のタイムアウトを実装する |
トラブルシューティングのクイックガイド
| 問題 | 考えられる原因 | 解決策 |
|---|---|---|
| npm audit で脆弱性が表示される | 依存関係が古い(A03) | npm audit fix を実行するか、手動で更新する |
| 5 回試行すると必ずログインに失敗する | レートリミッターの制限が厳しすぎる(A07) | レート制限の設定を見直す |
| Git の履歴にシークレットが漏えいした | .env ファイルをコミットした(A02) | BFG で履歴を整理し、シークレットをローテーションする |
| データベースのクエリが遅い/失敗する | SQL インジェクション攻撃(A05) | ログを確認し、パラメーター化クエリに切り替える |
| ユーザーが他のユーザーのデータにアクセスしている | 認可が不足している(A01) | すべてのエンドポイントに所有者チェックを追加する |
| 本番環境でスタックトレースが表示される | 例外処理が無効になっている(A10) | 本番環境向けのエラー処理を有効にする |
関連スキル
コメント
Markdown 対応