
本書は読者が脆弱性の実物にふれることを重視しています。そのため、読者が安心して攻撃方法を体験できるように、VirtualBoxの仮想マシン上で脆弱性のサンプルを試せるようにしました。実習に必要なソフトウェアは本書のサポートサイトからダウンロードできます。どうか、読者が自ら手を動かすことで、脆弱性の理解を深めていただければと思います。本書第2版がWebサイト
脆弱性とは、「悪用できるバグ」

開発者にとってバグは身近なものです。アプリケーションにバグがあると様々な悪いことが起きます。たとえば、間違った結果を表示する、処理がいつまでたっても終わらない、画面が乱れる、異常に遅い、などなどです。そして、バグの中には、悪用ができてしまうものもあります。そのようなバグのことを脆弱性(vulnerability)またはセキュリティバグと呼びます。脆弱性は「ぜい弱性」と表記される場合もあります。Webアプリケーションの脆弱性がボットネットワークの構築に使われています。その様子を図1-1に示しました。
実習環境の概要

本書では上記の環境をセットアップしたVirtualBox仮想マシンをダウンロードできるよう用意しました。VirtualBox上でLinuxを動かすイメージを下図に示します。仮想マシン上のLinuxサーバーは実際には読者のPCで動いていますが、これをインターネット上のサーバーであると見なしてください。仮想マシンの利用により、インターネット上のサーバーに近い環境を手元のPC上に再現することができます。
クロスサイト・スクリプティング

様々な状況で発生するクロスサイト・スクリプティング脆弱性について、前項を補足する内容を説明します。具体的には、href属性などURLを保持する属性値、イベントハンドラのスクリプト、script要素内についてです。外部から変更できるパラメータがどこに置かれているかによってエスケープ方法が変わるため、先に紹介した図を拡張したものを示します。
「重要な処理」の際に混入する脆弱性

これは、CSRF攻撃のための罠のHTMLファイルです。攻撃者はインターネット上のどこかにこのファイルを置き、攻撃対象サイトの利用者が見そうなコンテンツから誘導します。攻撃対象サイトの利用者がこのHTMLを閲覧した際の様子を図に示します。
CSRF攻撃とXSS攻撃の比較

CSRFと(反射型の)XSSは名前が似ているだけでなく、攻撃に至るシナリオが似ており、さらに攻撃の影響が一部重なっているので、両者を混同する人が少なくありません。両者を比較するために、図にCSRFと反射型XSSの攻撃シナリオを示します。CSRFとXSSは、①から③までは似た経路をたどりますが、その後が違います。
クリックジャッキング対策

frameおよびiframeでの参照を制限するX-Frame-Optionsという仕様が米Microsoft社から提唱され、現在では主要ブラウザ(IE、Firefox、Google Chrome、Safari、Opera)の最新版で採用されています。この仕様に対応することによりクリックジャッキング対策が容易にできるようになっています。X-Frame-Optionsはレスポンスヘッダとして定義されており、DENY(拒否)あるいはSAMEORIGIN(同一生成元に限り許可)のいずれかの値をとります。DENYを指定したレスポンスはframeなどの内側で表示されなくなります。SAMEORIGINの場合は、アドレスバーに表示されたオリジンと同じオリジンである場合のみ表示されます。