OWASP Top 10 チートシート
OWASP Top 10脆弱性のクイックリファレンス。インジェクション、認証不備、機密データ、XXE、アクセス制御、設定ミス、XSS、デシリアライズ、コンポーネント、ログを網羅
57 件のコマンド
パラメータ化クエリSQLインジェクション防止のためプリペアドステートメントを使用
db.query('SELECT * FROM users WHERE id = ?', [userId])ORMの使用生SQLの代わりにORMを使用してインジェクションを防止
User.findOne({ where: { id: userId } })入力バリデーションすべてのユーザー入力をホワイトリストで検証
if (!/^[a-zA-Z0-9]+$/.test(input)) throw Error()ストアドプロシージャ安全なストアドプロシージャでSQLインジェクションを防止
CALL get_user_by_id(@user_id)エスケープ処理特殊文字をエスケープしてインジェクションを防止
mysql.escape(userInput)NoSQLインジェクション対策MongoDBクエリで$演算子インジェクションを防止
sanitize-mongo: mongo-sanitize(req.body)LDAPインジェクション対策LDAPクエリの特殊文字をエスケープ
ldap.escape.filter(userInput)bcryptハッシュパスワードをbcryptでハッシュ化して保存
bcrypt.hash(password, 12)多要素認証 (MFA)TOTPベースの二要素認証を実装
speakeasy.totp.verify({ secret, token })セッション管理セッションIDを認証後に再生成
req.session.regenerate(callback)レート制限ブルートフォース攻撃を防ぐためレート制限を実装
express-rate-limit: { max: 5, windowMs: 15*60*1000 }パスワードポリシー強力なパスワードポリシーを強制
zxcvbn(password).score >= 3アカウントロックアウト連続失敗後にアカウントを一時ロック
if (failCount >= 5) lockUntil = Date.now() + 30*60*1000HTTPS強制すべての通信をHTTPS経由に強制
Strict-Transport-Security: max-age=31536000AES-256暗号化機密データをAES-256-GCMで暗号化
crypto.createCipheriv('aes-256-gcm', key, iv)TLS 1.2以上TLS 1.2以上のみを許可
ssl_protocols TLSv1.2 TLSv1.3;機密データのマスキングログやレスポンスで機密データをマスク
card: '****-****-****-' + last4鍵管理暗号鍵をHSMまたは専用サービスで管理
AWS KMS: aws kms encrypt --key-id alias/mykey外部エンティティ無効化XMLパーサーで外部エンティティの処理を無効化
factory.setFeature(DISALLOW_DOCTYPE, true)DTD無効化DTD(Document Type Definition)を完全に無効化
libxml_disable_entity_loader(true)JSONの使用XMLの代わりにJSONフォーマットを使用
Content-Type: application/jsonXMLバリデーションXMLスキーマ(XSD)でXML入力を検証
schema.validate(xmlDocument)SAST検出静的解析ツールでXXE脆弱性を検出
semgrep --config=p/owasp-top-tenRBAC実装ロールベースのアクセス制御を実装
@Roles('admin') @UseGuards(RolesGuard)JWTクレーム検証JWTトークンのクレームを毎回検証
jwt.verify(token, secret, { audience: 'api' })CORS設定許可するオリジンを明示的に指定
Access-Control-Allow-Origin: https://example.comIDOR防止オブジェクト参照時にオーナーシップを検証
if (resource.ownerId !== req.user.id) return 403最小権限の原則必要最小限の権限のみを付与
GRANT SELECT ON users TO readonly_roleデフォルト認証情報変更デフォルトのパスワードと管理者アカウントを変更
ALTER USER admin SET PASSWORD 'strongP@ss!'不要なサービス無効化使用していないポートやサービスを無効化
systemctl disable --now telnet.socketエラーメッセージ制御本番環境でスタックトレースを非表示
app.use((err, req, res, next) => res.status(500).json({error:'Internal'}))セキュリティヘッダー設定Helmetミドルウェアでセキュリティヘッダーを設定
app.use(helmet())ディレクトリリスティング無効化Webサーバーのディレクトリ一覧表示を無効化
Options -Indexesサーバーバナー非表示HTTPレスポンスからサーバー情報を削除
server_tokens off;出力エンコーディングHTMLコンテキストに応じて出力をエンコード
DOMPurify.sanitize(userInput)CSP設定Content-Security-Policyヘッダーを設定
Content-Security-Policy: default-src 'self'HttpOnly CookieCookieにHttpOnlyフラグを設定
Set-Cookie: session=abc; HttpOnly; Secureテンプレートエンジンの自動エスケープテンプレートエンジンの自動エスケープを有効化
{{ user.name | escape }}DOM操作の安全化innerHTMLの代わりにtextContentを使用
element.textContent = userInputサニタイゼーションリッチテキスト入力をホワイトリストベースでサニタイズ
sanitizeHtml(input, { allowedTags: ['b','i','em'] })署名付きシリアライズシリアライズデータにHMAC署名を付与
hmac = crypto.createHmac('sha256', secret).update(data)型チェックデシリアライズ時に型を厳密にチェック
zod.object({ name: z.string(), age: z.number() }).parse(data)Javaデシリアライズ対策JavaのObjectInputStreamをフィルタリング
ObjectInputFilter.Config.setSerialFilter(filter)JSON Webトークン検証JWTの署名アルゴリズムを明示的に指定
jwt.verify(token, key, { algorithms: ['RS256'] })pickle回避Pythonのpickleを信頼できないデータに使わない
json.loads(data) # instead of pickle.loads(data)npm auditNode.js依存関係の脆弱性をスキャン
npm audit --productionSnykスキャンSnykでプロジェクトの脆弱性をスキャン
snyk test --all-projectsDependabot有効化GitHubのDependabotで自動セキュリティ更新
dependabot.yml: schedule: interval: dailyOWASP Dependency-CheckOWASP Dependency-Checkで脆弱なライブラリを検出
dependency-check --project myapp --scan ./libTrivy コンテナスキャンTrivyでコンテナイメージの脆弱性をスキャン
trivy image myapp:latestpip-auditPython依存関係の脆弱性をスキャン
pip-audit --requirement requirements.txt認証イベントログログイン成功・失敗を必ずログに記録
logger.info('login_success', { userId, ip, timestamp })アクセスログ設定詳細なアクセスログを設定
access_log /var/log/nginx/access.log combined;SIEM連携ログをSIEMシステムに送信して相関分析
filebeat -> Elasticsearch -> Kibanaアラート設定異常なアクティビティに対するアラートを設定
alert: login_failures > 10 in 5m -> notify監査ログ権限変更やデータアクセスの監査ログを記録
auditLog.record({ action: 'delete', resource, actor })ログの改ざん防止ログの整合性を保証するため書き込み専用ストレージに保存
aws s3api put-object-lock-configuration --bucket logs