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

2022年12月4日よりDocker版実習環境を提供します。オリジナルの実習環境はVirtualBox上の仮想マシンとして提供していますが、M1/M2 MacではVirtualBoxが動作しないことから、Docker版として提供するものです。
元々はM1/M2 Macを想定してARM64アーキテクチャ用に作りましたが、AMD64のWindowsやMacでも動作するように作っています。

Dockerコンテナの起動方法

ダウンロードページから実習用仮想マシン (Docker版)をダウンロードして適当なディレクトリに設置してください。
以下のコマンドによるコンテナーのビルド及び実行をします。

            $ cd <wasbook-docker.zip を設置したディレクトリ>
            $ unzip wasbook-docker.zip   # あるいは適当な方法でのzip解凍
            $ cd wasbook-docker
            $ docker compose up -d

            イメージのビルドが開始され、その後コンテナが起動する

これだけです。 デフォルトの設定では、PROXY(フォワードプロキシ)のポートのみが公開されています。利用者はこのPROXY経由で実習環境にアクセスする形になります。

一般的な使い方(PROXY経由)

このアプリケーションの通常の利用は、apacheコンテナが提供するPROXY(フォワードプロキシ)を介して実習環境に接続する方法です。 お使いの診断ツール(拙著での想定はOWASP ZAPだがBurp Suite等でも同様)の外部接続用のPROXY設定に以下を追加します。

            IP: 127.0.0.1
            Port: 13128 (.envにより変更可能、後述)

実習環境はexample.jpなどのホスト名を使いますが、これらの名前解決はPROXY側で行うため、お手元の端末(Dockerホスト)ではhostsファイル等の設定は必要ありません。 この状態で、http://example.jp/をアクセスしてください。

OWASP ZAPの外部PROXY設定の方法は、ZAPのVer 2.11以前と 2.12以降で異なります。

OWASP ZAP 2.11まで

メニュー ツール | オプションから、ツール設定ダイアログを表示して、左側のペインにて「ネットワーク」を選択し、右側のペイン(下にスクロールする)にて「外部プロキシサーバー利用」のチェックを入れ、その下のアドレス/ドメイン名とPort欄に上記の値を入力して、右下のOKボタンを押す。



OWASP ZAP 2.12以降

メニュー ツール | オプションから、ツール設定ダイアログを表示して、左側のペインにて「Network」のサブカテゴリーの「ネットワーク」を選択し、右側のペインにて「HTTP Proxy」タブを選択して、ホスト欄とポート欄に上記の値を入力して、右下のOKボタンを押す。

Mac版


Windows版


PROXYを経由しない利用法

PROXYを経由せずに直接Webサイトにアクセスするには、docker composeコマンドを実行する前に、docker-compose.ymlの以下の部分を変更します。

修正前
          nginx:
            build: nginx
            # Nginxを直接公開する場合は以下の3行を有効化する
            #ports:
            #  - ${WEB_IP:-127.0.0.1}:80:80
            #  - ${WEB_IP:-127.0.0.1}:443:443
修正後(コメントを3行外す)
          nginx:
            build: nginx
            # Nginxを直接公開する場合は以下の3行を有効化する
            ports:
              - ${WEB_IP:-127.0.0.1}:80:80
              - ${WEB_IP:-127.0.0.1}:443:443

デフォルトでは、127.0.0.1でアクセスできます。このため、/etc/hostsファイル(WindowsではC:\Windows\System32\drivers\etc)に以下を追加します。管理者権限が必要です。編集 の方法については、拙著の2.4節 仮想マシンのインストールの「hostsファイルの編集」項を参照ください。

            127.0.0.1		example.jp	api.example.net	trap.example.com

macOSでは、ループバックアドレスとして127.0.0.1以外を用いて、IPアドレスの衝突を避けることができます。この場合は、以下の手順に従います。

            $ cp env_example .env
            # .envを以下のように修正
            
            # WEB_IP=127.10.90.1
              ↓ コメントアウト
            WEB_IP=127.10.90.1
            
            # 指定したループバックアドレスを有効にする
            $ sudo ifconfig lo0 alias 127.10.90.1 up
            # 後は普通に実行
            $ docker compose up -d

この状態で、ブラウザからhttp://example.jp/ をアクセスしてください。ブラウザのプロキシ設定は拙著通りで大丈夫です。

PROXYのポート変更方法

実習環境の入り口であるPROXYのポートはデフォルトでは13128ですが、変更することもできます。以下は 8888 にて待ち受けする例です。

        $ cp env_example .env
        # .envを以下のように修正
        
        # 通常利用するPROXY(フォワードプロキシ)のポート
        # APACHE_PROXY_PORT=13128
          ↓ コメントアウトしてポートを変更
        # 通常利用するPROXY(フォワードプロキシ)のポート
        APACHE_PROXY_PORT=8888
        
        # 後は普通に実行
        $ docker compose up -d

Dockerコンテナを起動した後にポートを変更する場合は、上記の変更をした後、いったんapacheコンテナを削除してからdocker compose up -dを実行してください。