体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践
体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践

電子版

セキュリティをしっかりやりたいPHPerにオススメです。コードはほとんどPHP。

本書では、脆弱性のある環境に攻撃を仕掛ける実習もできます。が、実習環境はWindowsを前提としています。仮想化ソフトのVMWareはWindows版(VMWare Player)は無料だけどMac版(VMWare Fusion)は有料だし、HTTP通信を確認するFiddlerもWindows環境限定。

Macでの実習に関しては以下のエントリが参考になります。

#wasbook の実習をmacでやる環境を作った

私の環境は次の通り。

・OS:Mac OS X MountainLion
・仮想化:VMWare Fusion 5 なお、VirtualBoxでも代用可能っぽい
・HTTP:HttpFoxとFirebugを併用


以下、覚えておきたい部分や詰まった箇所をメモしていきます。


1. 仮想マシンセットアップ

「この仮想マシンは移動またはコピーされた可能性があります」ダイアログが出た際に、「移動しました(正解)」ではなく、「コピーしました(間違い)」を選んでしまいました(ダイアログで、「よくわからないなら「コピーしました」を選択してください」と出てくるので…)。

「コピーしました」を選ぶと、eth0が存在しない等、ネットワーク関係の設定がおかしくなります。必ず「移動しました」を選びましょう。


2. hiddenパラメーターの書き換え

p.36では、FiddlerでHTTP通信を途中で止めて書き換えています。私の使っているHttpFoxには同等の機能が見当たらなかったので、Firebugで<input type="hidden">のformのvalueの値を書き換えて送信してみました。このやり方でもhiddenパラメーターの書き換えは行えます。


3. Base64エンコードされた文字列の復号(p.41)

Basic認証の際にidとパスワードを入力すると、Base64エンコードされたidとパスワードがAuthorizationヘッダーに入れて送信されます。このBase64エンコードされた文字列を復号するのに、本書ではFiddlerの機能を使っています。Fiddlerが使えなくても、該当文字列をコピーして、PHPのbase64_decode()に渡せば復号できます。

$str_base64_encoded =
'dXNlcjE6cGFzczE=';//dXN…はBase64エンコードされた文字列
$str_decoded = base64_decode(
$str_base64_encoded);//復号
echo $str_decoded;//「user1:pass1」という文字列が出力される


☆ブラウザーとサーバーのやり取りを会話にたとえていて、わかりやすい。

☆Cookieの属性の推奨設定
・Domain属性は原則として設定しない
・原則としてHttpOnly属性を設定し、JavaScriptからアクセス出来ないようにする
 PHPの場合、php.iniに「session.cookie_httponly = On」を書くとHttpOnly属性が付く。