はじめに
本ドキュメントの目的
本ドキュメントは、Webアプリケーションのセキュリティ対策をわかりやすくまとめたチェックリスト集です。OWASP Top 10に基づく基本対策から、開発者向けの具体的な脆弱性チェック、診断時に確認される主要項目までを体系的に解説します。初めてセキュリティ対策に取り組む方でも実務で使いやすい内容を目指しています。
対象読者
- Webアプリ開発者や運用担当者
- セキュリティ初心者から中級者まで
- セキュリティチェックを日常業務に組み込みたい方
本書の構成と使い方
- 第2章:OWASP Top 10に基づくセキュリティチェックリスト。基本的な脅威と防止策を項目ごとに示します。
- 第3章:開発者向けの脆弱性チェック。実際のコードや設定で確認すべきポイントを具体例で示します。
- 第4章:Webアプリケーション診断の7つのチェック項目。診断時の優先順位と検査手順を説明します。
各章は短いチェックリスト形式を中心にしています。まず項目を確認し、該当する項目を実装・検証する流れで使ってください。
注意点
本書は一般的な指針を提供します。実際の運用では環境や利用者の要件に応じて優先度を決め、必要なら専門家による評価を受けてください。
OWASP Top 10に基づくセキュリティチェックリスト
概要
OWASP Top 10を参考に、日常の開発で確認すべき実践的なチェックリストを示します。各項目は具体的な対策例を挙げています。
1. インジェクション(例: SQL, コマンド)
- パラメータ化クエリ(プリペアドステートメント)を使用する
- 入力値をサニタイズし、型や長さを検証する
- DBに直接渡す前にホワイトリストで確認する
2. 認証とセッション管理の不備
- セッションIDは長く十分にランダムにし、Secure/HttpOnlyフラグを付ける
- パスワードは強いハッシュ(例: bcrypt)で保存する
- 多要素認証を導入する
3. 機密情報の露出防止
- 通信は常にTLSを強制する
- 機密データは保存時に暗号化する
- 不要な情報はログに出力しない
4. アクセス制御の不備
- ロールベースアクセス制御(RBAC)を実装する
- サーバ側で必ず権限チェックを行う
- 各APIに最小権限を設定する
5. クロスサイトスクリプティング(XSS)
- 出力時に適切にエスケープする(HTML, JS, URLごとに)
- Content-Security-Policyを設定する
6. 設定ミス・脆弱なコンポーネント
- デフォルトの管理アカウントは無効化する
- 依存ライブラリを定期的に更新する
7. テストと教育
- SAST/DASTや自動スキャンを導入する
- 定期的なコードレビューと開発者教育を行う
実務では上記をチェックリスト化し、CIに組み込むと効果的です。
Webアプリ開発者のための脆弱性チェックリスト
ファイルインクルード対策
- 許可するファイル名・拡張子をホワイトリストで限定します(例:.jpg,.png,.pdf)。
- 外部URLの読み込みは原則禁止し、どうしても必要な場合は明示的なホワイトリストのみ許可します。
- アップロード先や参照パスは固定ディレクトリ内に限定し、realpathなどでディレクトリトラバーサルを防ぎます。
CSRF対策
- 各フォームに一意のCSRFトークンを埋め込み、サーバー側で検証します(hidden input)。
- CookieにはSameSite属性を設定し、通常はLaxかStrictを使用します。
- 重要な操作ではOrigin/Refererヘッダの検証も行います。
セッションハイジャック対策
- セッションCookieにHttpOnlyとSecureを設定します。
- ログイン時にセッションIDを再生成し(例:session_regenerate_id())、固定セッション攻撃を防ぎます。
- アイドルタイムアウトや総セッション長を短めに設定し、必要に応じてIPやUser-Agentを束縛します。
多要素認証(MFA)
- 重要なアカウントにはMFAを必須にします。アプリ方式(TOTP)を推奨します。
- バックアップコードやリカバリ手順を安全に提供し、再発行の認証を厳格に行います。
オープンリダイレクト対策
- リダイレクト先は正規ドメインのホワイトリストに限定します。
- 相対パスのみ許可するか、外部の場合は内部IDにマッピングして安全に解釈します。
- 外部へ遷移する場合は確認画面を挟んでユーザーへ通知します。
その他の実務チェック
- 入力はサニタイズとバリデーションを両方行い、エラーメッセージに機密情報を出さない。
- 権限は最小権限で設計し、認可チェックはサーバー側で必ず行う。
- ログを残して監査し、異常なアクセスにはレート制限やアラートを設定する。
Webアプリケーション診断の7つのチェック項目
1. SQLインジェクション
データベースに不正な命令を送る攻撃を確認します。具体例:ログイン画面に「’ OR ‘1’=’1」のような値を入力して不正に認証できないか試します。対策はパラメータ化された問合せ(プレースホルダ)や入力長の制限です。
2. OSコマンドインジェクション
サーバー上で任意コマンドが実行されないか検査します。具体例:ファイル名入力欄に「; ls -la」を入れて応答を確認します。対策は外部コマンド呼び出しの禁止と入力エスケープです。
3. クロスサイトスクリプティング(XSS)
悪意あるスクリプトが表示されて他者の情報を奪うリスクを調べます。例:コメント欄にalert(1)を入れて動作を確認します。対策は出力時のエスケープとコンテンツセキュリティポリシー(CSP)導入です。
4. CSRF
利用者の意図しない操作を実行させる脆弱性を検査します。テスト例:外部ページからPOST送信して処理が実行されるか確認します。対策はワンタイムトークン(CSRFトークン)やRefererチェックです。
5. 認証・セッション管理
パスワードリセットやセッション固定、セッションハイジャックの有無を確認します。例:ログアウト後にセッションが無効化されるかを検査します。対策はセッションIDの再生成と短めの有効期限です。
6. アクセス制御・権限管理
ユーザーが許可されない操作やデータにアクセスできないか確認します。例:別ユーザーのIDを指定して情報が見えないか試します。対策はサーバー側での厳密な権限チェックです。
7. 入力・出力の妥当性検査(バリデーション)
期待する形式だけを受け入れるか検査します。例:メール欄に長い文字列や不正文字を送って処理を確認します。対策はサーバー側バリデーションと出力のサニタイズです。












