『Webアプリケーションセキュリティ入門』のレビュー用PDFは、MiniSNSという小さなWebアプリを題材に、通信の観察から脆弱性の原因、修正、回帰テストまでを扱う資料だ。取得したPDFは619ページ。ここでは全章の正しさを評価するのではなく、冒頭とテスト・認可の説明に絞って、学習の進め方を見る。教材コードの実行検証は行っていない。

軸になるのは、表紙にもある「BUILD・BREAK・FIX・VERIFY」。攻撃が通ったところで終わらず、なぜ通ったのか、直した後も拒否できるかまで追う。この最後の確認を、普段の開発へ持ち帰りたい。

同じリクエストで実装の差を見る

本文では、Flask・SQLAlchemy・SQLiteを使ったMiniSNSの脆弱版と安全版を比較する。機能やURL、初期データをそろえ、ポート、データベース、アップロード領域を分ける構成だ。接続先ポート以外が同じリクエストを送り、結果とコードの差を確かめる。

別々のサンプルを読むより、何を変えたから拒否できたのかを追いやすい。Burp Suite Community Editionで通信を保存・編集・再送する手順も、この比較を支えるために置かれている。

ただし、全章が実行演習ではない。本文はSSRFやXML・シリアライズの章について、現行MiniSNSに脆弱な機能を追加せず、設計例と確認方法を中心に学ぶと明記している。目次に項目があることと、動く教材があることは分けて読む必要がある。

拒否された後のデータまで確かめる

具体的なのが、2.13節の他人の投稿を編集できないことを確かめるテストだ。安全版の例は、レスポンスが403であることに加え、データベース内の投稿本文が変わっていないことも検証する。

エラー画面が出たから安全、とは限らない。拒否の応答を返していても、裏で更新してしまう実装なら修正は不十分だ。HTTPの結果と保存された状態を両方見る、という判断基準になる。

6.16節では認可を「誰が・どの対象へ・何を・どんな条件で行うか」の組み合わせで整理する。未ログイン、本人、別の一般利用者、管理者を並べ、許可と拒否の両方をテストする。さらに、HTML画面とJSON APIを対にして確認する。画面側だけ直してAPI側を取り残す、といった抜けを探す読み方だ。

OWASPのAuthorization Cheat Sheetも、最小権限、既定での拒否、リクエストごとの権限確認、設計した権限のテストを勧めている。教材固有の期待値は、自分のサービスの仕様に置き換えて使いたい。

「安全版」も本番用のひな型ではない

冒頭には、Secure版はそのまま本番投入できる完成品ではない、と明記されている。Docker環境も、ホスト側の公開先を127.0.0.1に限定する一方で、外向き通信は遮断していない。間接依存を固定するロックファイルも未整備と説明されている。

この区別は読み飛ばせない。ローカル公開やコンテナ化を、完全な隔離と受け取らないこと。演習は許可された教材環境の範囲にとどめる。

最初から全章を通読するより、認可の章で一つの操作を選び、許可する人と拒否する人を書き出すところから始めるとよさそうだ。そのうえで、拒否時にデータが変わらず、正当な操作は成功することをテストへ残す。修正の説明を「対策した」から「この条件で確かめた」へ変えるための読み方になる。

参考