安全なWebアプリケーションの作り方 第2版 サポートサイト

目次

1章 Webアプリケーションの脆弱性とは
1.1 脆弱性とは、「悪用できるバグ」
1.2 脆弱性があるとなぜ駄目なのか
1.3 脆弱性が生まれる理由
1.4 セキュリティバグとセキュリティ機能
1.5 本書の構成
1.6 セキュリティガイドラインとの対応

2章 実習環境のセットアップ
2.1 実習環境の概要
2.2 Firefoxのインストール
2.3 VirtualBoxのインストール
2.4 仮想マシンのインストールと動作確認
2.5 OWASP ZAPのインストール
2.6 Firefoxの拡張FoxyProxy-Standardのインストール
2.7 OWASP ZAPを使ってみる
2.8 Webメールの確認

3章 Webセキュリティの基礎
3.1 HTTPとセッション管理
3.2 受動的攻撃と同一オリジンポリシー
3.3 CORS(Cross-Origin Resource Sharing)

4章 Webアプリケーションの機能別に見るセキュリティバグ
4.1 Webアプリケーションの機能と脆弱性の対応

4.2 入力処理とセキュリティ

4.3 表示処理に伴う問題
4.3.1 クロスサイト・スクリプティング(基本編)
4.3.2 クロスサイト・スクリプティング(発展編)
4.3.3 エラーメッセージからの情報漏洩

4.4 SQL呼び出しに伴う脆弱性
4.4.1 SQLインジェクション

4.5 「重要な処理」の際に混入する脆弱性
4.5.1 クロスサイト・リクエストフォージェリ(CSRF)
4.5.2 クリックジャッキング

4.6 セッション管理の不備
4.6.1 セッションハイジャックの原因と影響
4.6.2 推測可能なセッションID
4.6.3 URL埋め込みのセッションID
4.6.4 セッションIDの固定化

4.7 リダイレクト処理にまつわる脆弱性
4.7.1 オープンリダイレクト
4.7.2 HTTPヘッダ・インジェクション
4.7.3 リダイレクト処理にまつわる脆弱性のまとめ

4.8 クッキー出力にまつわる脆弱性
4.8.1 クッキーの不適切な利用
4.8.2 クッキーのセキュア属性不備
4.9 メール送信の問題
4.9.1 メール送信の問題の概要
4.9.2 メールヘッダ・インジェクション

4.10 ファイルアクセスにまつわる問題
4.10.1 ディレクトリ・トラバーサル
4.10.2 意図しないファイル公開

4.11 OSコマンド呼び出しの際に発生する脆弱性
4.11.1 OSコマンド・インジェクション

4.12 ファイルアップロードにまつわる問題
4.12.1 ファイルアップロードの問題の概要
4.12.2 アップロードファイルによるサーバー側スクリプト実行
4.12.3 ファイルダウンロードによるクロスサイト・スクリプティング
4.12.4 PDFのFormCalcによるコンテンツハイジャック

4.13 インクルードにまつわる問題
4.13.1 ファイルインクルード攻撃

4.14 構造化データの読み込みにまつわる問題
4.14.1 evalインジェクション
4.14.2 安全でないデシリアライゼーション
4.14.3 XML外部実体参照(XXE)

4.15 共有資源やキャッシュに関する問題
4.15.1 競合状態の脆弱性
4.15.2 キャッシュからの情報漏洩

4.16 Web API実装における脆弱性
4.16.1 JSONとJSONPの概要
4.16.2 JSONエスケープの不備
4.16.3 JSON直接閲覧によるXSS
4.16.4 JSONPのコールバック関数名によるXSS
4.16.5 Web APIのクロスサイト・リクエストフォージェリ
4.16.6 JSONハイジャック
4.16.7 JSONPの不適切な利用
4.16.8 CORSの検証不備
4.16.9 セキュリティを強化するレスポンスヘッダ

4.17 JavaScriptの問題
4.17.1 DOM Based XSS
4.17.2 Webストレージの不適切な使用
4.17.3 postMessage呼び出しの不備
4.17.4 オープンリダイレクト

5章 代表的なセキュリティ機能
5.1 認証
5.1.1 ログイン機能
5.1.2 パスワード認証を狙った攻撃への対策
5.1.3 パスワードの保存方法
5.1.4 自動ログイン
5.1.5 ログインフォーム
5.1.6 エラーメッセージの要件
5.1.7 ログアウト機能
5.1.8 認証機能のまとめ

5.2 アカウント管理
5.2.1 ユーザ登録
5.2.2 パスワード変更
5.2.3 メールアドレスの変更
5.2.4 パスワードリセット
5.2.5 アカウントの停止
5.2.6 アカウントの削除
5.2.7 アカウント管理のまとめ

5.3 認可
5.3.1 認可とは
5.3.2 認可不備の典型例
5.3.3 認可制御の要件定義
5.3.4 認可制御の正しい実装
5.3.5 まとめ

5.4 ログ出力
5.4.1 ログ出力の目的
5.4.2 ログの種類
5.4.3 ログ出力の要件
5.4.4 ログ出力の実装
5.4.5 まとめ

6章 文字コードとセキュリティ
6.1 文字コードとセキュリティの概要
6.2 文字集合
6.3 文字エンコーディング
6.4 文字コードによる脆弱性の発生要因まとめ
6.5 文字コードを正しく扱うために
6.6 まとめ

7章 脆弱性診断入門
7.1 脆弱性診断の概要
7.2 脆弱なサンプルアプリケーション Bad Todo
7.3 診断ツールのダウンロードとインストール
7.4 Nmapによるポートスキャン
7.5 OpenVASによるプラットフォーム脆弱性診断
7.6 OWASP ZAPによる自動脆弱性スキャン
7.7 OWASP ZAPによる手動脆弱性診断
7.8 RIPSによるソースコード診断
7.9 脆弱性診断実施上の注意
7.10 まとめ
7.11 脆弱性診断報告書のサンプル
7.11.1 XML外部実体参照(XXE
7.11.2 クロスサイト・スクリプティング(XSS)

8章 Webサイトの安全性を高めるために
8.1 Webサーバーへの攻撃経路と対策
8.1.1 基盤ソフトウェアの脆弱性をついた攻撃
8.1.2 不正ログイン
8.1.3 対策
8.2 成りすまし対策
8.2.1 ネットワーク的な成りすましの手口
8.2.2 フィッシング
8.2.3 Webサイトの成りすまし対策
8.3 盗聴・改ざん対策
8.3.1 盗聴・改ざんの経路
8.3.2 中間者攻撃
8.3.3 対策
8.4 マルウェア対策
8.4.1 Webサイトのマルウェア対策とは
8.4.2 マルウェアの感染経路
8.4.3 Webサーバーのマルウェア対策の概要
8.4.4 Webサーバーにマルウェアを持ち込まない対策
8.5 まとめ

9章 安全なWebアプリケーションのための開発マネジメント
9.1 開発マネジメントにおけるセキュリティ施策の全体像
9.2 開発体制
9.3 開発プロセス
9.3.1 企画段階の留意点
9.3.2 発注時の留意点
9.3.3 要件定義時の留意点
9.3.4 基本設計の進め方
9.3.5 詳細設計・プログラミング時の留意点
9.3.6 セキュリティテストの重要性と方法
9.3.7 受注者側テスト
9.3.8 発注者側テスト(検収)
9.3.9 運用フェーズの留意点
9.3.10 アジャイル型開発プロセスへの適用
9.4 まとめ