関連サイト
本書の関連ページが用意されています。
内容紹介
既にインターネット上には、セキュリティの情報があふれるように載せられていますが、それらの多くは表面的な内容であり、開発エンジニアの疑問に答えられていません。具体的には、以下の疑問です。
- なぜ脆弱性が生まれるのか
- 脆弱性があるとどのような影響があるか
- 脆弱性を解消するにはどうプログラミングすればよいか
- なぜその方法で脆弱性が解消されるのか
本書はこれらの疑問に答えるために書かれました。そのため、脆弱性が生まれる原理から、具体的な対処方法とその根拠をできる限り丁寧に説明しています。本書の対象読者は、プログラマ、設計者、プロジェクトマネージャ、品質管理担当者など、Webアプリケーションの開発現場の方々すべてです。また、Webアプリケーションを発注する立場の方にも、できるだけ有用な情報を説明するように心がけました。
本書は開発者向けに書かれていますが、攻撃の方法についても具体的に説明しています。その理由は、脆弱性の影響を切実なものとして知って欲しいためです。しかし、そのような攻撃をWebサイトの管理者の許可なく試すと、不正アクセス禁止法などの法令違反になる場合があります。法令違反になるかどうかの判断は専門家でないと難しいので、攻撃手法を本番サイトに対して許可なく試さないでください。
そのため、読者が安心して攻撃方法を体験できるように、VMware Playerの仮想マシン上で脆弱性のサンプルを試せるようにしました。実習に必要なソフトウェアは、すべて本書添付のCD-ROMに収録されています。どうか、読者が自ら手を動かすことで、脆弱性の理解を深めていただければと思います。
(「はじめに」より抜粋)
書誌情報
- 著者: 徳丸浩
- 発行日: 2011-09-28 (紙書籍版発行日: 2011-03-01)
- 最終更新日: 2011-09-28
- バージョン: 1.0.0
- ページ数: 500ページ(PDF版換算)
- 対応フォーマット: PDF
- 出版社: SBクリエイティブ
対象読者
著者について
徳丸浩
1985年京セラ株式会社に入社後、ソフトウェアの開発、企画に従事。1999年に携帯電話向け認証課金基盤の方式設計を担当したことをきっかけにWebアプリケーションのセキュリティに興味を持つ。2004年同分野を事業化。2008年独立。脆弱性診断やコンサルティング業務のかたわら、ブログや勉強会などを通じてセキュリティの啓蒙活動をおこなっている。HASHコンサルティング株式会社代表、京セラコミュニケーションシステム株式会社技術顧問、独立行政法人情報処理推進機構(IPA)非常勤研究員。Twitter IDは@ockeghem。
目次
1章 Webアプリケーションの脆弱性とは
- 1.1 脆弱性とは、「悪用できるバグ」
- 1.2 脆弱性があるとなぜ駄目なのか
- 1.3 脆弱性が生まれる理由
- 1.4 セキュリティバグとセキュリティ機能
- 1.5 本書の構成
2章 実習環境のセットアップ
- 2.1 実習環境の概要
- 2.2 VMware Playerのインストール
- 2.3 仮想マシンのインストールと動作確認
- 2.4 Fiddlerのインストール
3章 Webセキュリティの基礎 ~HTTP、セッション管理、同一生成元ポリシー
- 3.1 HTTPとセッション管理
- 3.2 受動的攻撃と同一生成元ポリシー
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.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.13 インクルードにまつわる問題
- 4.13.1 ファイルインクルード攻撃
- 4.14 evalにまつわる問題
- 4.14.1 evalインジェクション
- 4.15 共有資源に関する問題
- 4.15.1 競合状態の脆弱性
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.2 アカウント管理
- 5.2.1 ユーザ登録
- 5.2.2 パスワード変更
- 5.2.3 メールアドレスの変更
- 5.2.4 パスワードリマインダ
- 5.2.5 アカウントの停止
- 5.2.6 アカウントの削除
- 5.3 認可
- 5.3.1 認可とは
- 5.3.2 認可不備の典型例
- 5.3.3 認可制御の要件定義
- 5.3.4 認可制御の正しい実装
- 5.4 ログ出力
- 5.4.1 ログ出力の目的
- 5.4.2 ログの種類
- 5.4.3 ログ出力の要件
- 5.4.4 ログ出力の実装
6章 文字コードとセキュリティ
- 6.1 文字コードとセキュリティの概要
- 6.2 文字集合
- 6.3 文字エンコーディング
- 6.4 文字コードによる脆弱性の発生要因まとめ
- 6.5 文字コードを正しく扱うために
7章 携帯電話向けWebアプリケーションの脆弱性対策
- 7.1 携帯電話向けWebアプリケーションの技術的特徴
- 7.2 携帯ブラウザの技術仕様
- 7.2.1 JavaScriptの仕様
- 7.2.2 クッキーの仕様
- 7.3 かんたんログインの問題
- 7.4 URL埋め込みのセッションIDによる問題
- 7.5 その他の問題
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サーバーにマルウェアを持ち込まない対策
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 運用フェーズの留意点