技術Tips
Webアプリケーションのためのセキュリティ監査チェックリスト
認証、認可、セッション管理からインジェクション対策まで。自社で実施できるセキュリティ監査の重要項目を網羅。
佐藤 裕介
フルスタックエンジニアとして15年以上の経験を持ち、スタートアップから大企業まで幅広いプロジェクトに携わってきました。
Security Audit Checklist WebApp OWASP
はじめに
外部の専門家によるペネトレーションテストは非常に重要ですが、それにはコストと時間がかかります。開発チームが日頃からセキュリティ意識を持ち、定期的に自己監査を行うことで、多くの基本的な脆弱性を未然に防ぐことができます。この記事では、OWASP ASVS (Application Security Verification Standard) などを参考に、開発者が使えるWebアプリケーションのセキュリティ監査チェックリストを提供します。
監査チェックリスト
1. 認証 (Authentication)
- パスワードはソルト付きの強力なハッシュ関数(Argon2, bcryptなど)でハッシュ化されているか?
- パスワード強度要件(長さ、複雑さ)は適切か?
- 総当たり攻撃を防ぐためのアカウントロックアウト機能やレートリミットは実装されているか?
- 多要素認証(MFA)は提供されているか?
- パスワードリセット機能は、トークンが推測困難で、有効期限が設定されているか?
2. セッション管理 (Session Management)
- セッションIDは十分にランダムで推測不可能か?
- セッションIDはCookieの
HttpOnly,Secure,SameSite属性で保護されているか? - ログイン成功時に、古いセッションIDを破棄し、新しいセッションIDを生成しているか(セッション固定化攻撃対策)?
- ログアウト時にサーバー側でセッションが確実に無効化されているか?
- 適切なセッションタイムアウト(アイドル、絶対)が設定されているか?
3. アクセス制御 (Access Control)
- 水平方向・垂直方向のアクセス制御は、サーバーサイドで強制されているか?(リクエストのIDを書き換えて他人の情報が見えないか等)
- アクセス制御のロジックは、デフォルトで拒否するフェイルセーフな設計か?
- CORS設定は、信頼できるオリジンのみに限定されているか?
4. 入力バリデーションとサニタイズ
- SQLインジェクション: プリペアドステートメントやORMが使用されているか?
- クロスサイトスクリプティング (XSS): 全てのユーザー出力をコンテキストに応じて適切にエスケープしているか? Content Security Policy (CSP) は導入されているか?
- OSコマンドインジェクション: 外部からの入力を使ってコマンドを組み立てていないか?
- ファイルアップロード: ファイルの拡張子、種類(MIMEタイプ)、サイズを検証しているか?
5. エラーハンドリングとロギング
- エラーメッセージに、スタックトレースなどの詳細なシステム情報が含まれていないか?
- 認証の試行、アクセス制御の失敗、入力バリデーションエラーなど、セキュリティ上重要なイベントはログに記録されているか?
6. セキュリティヘッダー
-
Strict-Transport-Security(HSTS) ヘッダーが設定されているか? -
X-Content-Type-Options: nosniffヘッダーが設定されているか? -
X-Frame-OptionsまたはContent-Security-Policy: frame-ancestorsヘッダーでクリックジャッキング対策がされているか?
まとめ
このチェックリストは全てを網羅するものではありませんが、基本的なセキュリティ項目を体系的に確認するための良い出発点となります。定期的な自己監査を開発プロセスに組み込み、セキュアなアプリケーション開発を習慣づけましょう。
著者について
佐藤 裕介
フルスタックエンジニアとして15年以上の経験を持ち、スタートアップから大企業まで幅広いプロジェクトに携わってきました。