『体系的に学ぶ安全なWebアプリケーションの作り方』3章まとめ

あの徳丸本が第2版になったと聞いて、最近セキュリティのことも仕事でちょっと触っているのもあり早速買って読んでいます。

600ページ超の充実した内容です。今回読んだのは3章「Webセキュリティの基礎~HTTP、セッション管理、同一オリジンポリシー、CORS」です。基礎的なこともよくわかっていないこともあり、内容を自分なりにまとめようと思います。

3.1HTTPとセッション管理

  • リクエストメッセージとレスポンスメッセージがある
  • レスポンスメッセージの1行目であるステータスラインはたとえばHTTP/1.1 200 OK
  • レスポンスメッセージの2行目はヘッダで、Content-LengthやContent-typeが入っている
  • POSTメソッドによるリクエスト・メッセージにはボディという部分がある
  • GETメソッドは参照(リソースの取得)のみに用いる。副作用がないことが期待される。
    • GETで秘密情報を送信した場合、様々な漏洩のリスクがある
  • 秘密情報の送信にはPOSTメソッドを使う
  • hiddenパラメータは利用者自身で書き換えられる
  • サーバー側がアプリケーションの状態を覚えておくことをセッション管理とよぶ
  • クッキーは値の個数や文字列長で限界があり、クッキーの値を利用者本人に参照・変更できるので、秘密情報の格納には向かない
    • セッションIDだけを持たせるべき
  • セッションIDに求められる要件は以下の3点
    • 三者がセッションIDを推測できないこと
    • 三者からセッションIDを推測されないこと
    • 三者にセッションIDが漏洩しないこと
  • セッションIDは認証後に変更するべき

後ろの2項に比べると基本的な内容。とはいえ知らないことも結構あり、勉強になった。セッションIDのセキュリティ上の重要性が理解できた。対話にたとえた説明が非常にわかりやすい。

3.2 受動的攻撃と同一オリジンポリシー

  • 受動的攻撃:Webサイトの利用者に罠を仕掛け、罠を閲覧したユーザーを通じてアプリを攻撃する。パターンが3つ紹介されている
    • 罠サイト
    • 正規サイトに罠を仕込む
      • この手法はよく用いられている
      • 正規サイトに罠を仕込む方法は後の章で記載されている
    • サイトをまたがった受動的攻撃
  • 受動的攻撃にはブラウザが対策を講じている
  • サンドボックスとは、JavaScriptや、ActiveXなどができることを制限する
    • JavaScriptの場合は以下の通り
      • ローカルファイルへのアクセス禁止
      • プリンタなどの資源の利用禁止
      • ネットワークアクセスの制限=同一オリジンポリシー
  • 同一オリジンポリシーとは、サイトをまたがったアクセス(クロスドメインアクセス)を禁止すること
  • アプリケーションに脆弱性があった場合、同一オリジンポリシーの制約を受けていても攻撃をすることが可能
  • クロスドメインアクセスは全面的に禁止されているわけではない

受動的攻撃の3手法は、2つ目が頻度・流出する情報の二点から特に危険なものだと感じた。あと3つ目については仕組みがまだよくわかっていない。

JavaScriptがやりたい放題できると危険極まりないから、ブラウザで制約をかけているという認識を持った。

3.3 CORS(Cross Origin Resource Sharing)

サイトを超えてデータをやり取りできる仕様のこと。 たとえばXMLHttpRequest

  • Access-Control-Allow-Origin:クロスオリジンからの読み出しを許可するための仕掛け
  • シンプルなリクエストの場合、相手の許可無しでHttpリクエストを送れる
    • メソッド、リクエストヘッダ、Content-Typeに制約がある
  • 条件を満たさない場合は、プリフライトリクエストを送る必要がある

全般的にこの項はついていけなかった。

まとめ

基本といいつつ、僕にとっては知らないことがかなり多かったので勉強になった。4章も折を見て進めていきたい。その前に環境構築が先かもだが。