Walk, Don't Run

若手エンジニアが日々学んだことをさらけ出すブログです

3-2受動的攻撃と同一生成元ポリシーのまとめ(安全なwebアプリケーションの作り方)

社内で最近、徳丸さんの「安全なwebアプリケーションの作り方」という本の輪読会が始まった。 正直なところ、そこまでセキュリティ云々の話に心が惹かれるわけではないのだが、webアプリケーションを勉強する良いきっかけになりそう!ということで参加している。甘い気持ちで入ったが、やはりwebの技術の前知識が乏しく、実際にアプリケーションを作ったことももなく、かなり苦戦している。いやでもね、webアプリケーションめちゃくちゃ楽しいです。エンタープライズJavaな人間なので仕事では使い道はあまりないけど、今後のためにしっかり食いついて行きたいと思う次第です。

以下、3-2節のまとめ。

3-2受動的攻撃と同一生成元ポリシー

簡単なまとめ:
受動的攻撃という攻撃手法と、受動的攻撃に対するブラウザの防御戦略である同一生成元ポリシーについて説明。 同一生成元ポリシーの元でも、Webアプリケーションに脆弱性があると攻撃されることがある(→4章)。



受動的攻撃

Webサイトに罠を仕掛けることにより、罠を回覧した利用者を通してアプリケーションを攻撃する手法。

受動的攻撃のパターン
  1. 単純な受動的攻撃:罠サイトを回覧させる(図3-23)
  2. 正規サイトを悪用する受動的攻撃:正規サイトに罠が仕掛ける(図3-24)
  3. サイトをまたがった受動的攻撃:罠サイトを回覧したユーザに正規サイトへの攻撃リクエストを送信させる(図3-25)

サンドボックス

ブラウザ側でプログラムの「できること」を制限し、安全性を高めるという考え方(子供の遊ぶ「砂場」という意味)。

  • ローカルファイルへのアクセス
  • プリンタなどの資源
  • ネットワークアクセス(同一生成元ポリシー)

同一生成元ポリシー

クロスドメイン(サイトをまたがったアクセス)を禁止する、JavaScriptの機能。

同一生成元である条件
  • URLのホスト(FQDN: Fully Qualified Domain Name)が一致している
  • スキーム(プロトコル)が一致している
  • ポート番号が一致している
JavaScriptによるiframeアクセスの実験

※iframeタグ:HTML文書の中にフレームを埋め込むもの。

iframeに「http://example.jp/32/32-002.html」の内容を表示し、それをJavaScriptで参照出来るかどうかを試す。

  1. http://example.jp/32/32-001.html」の場合→参照可
  2. http://trap.example.com/32/32-900.html」の場合→参照不可(ホストが異なるため)
クロスドメインが許可されているもの
  • frame要素・iframe要素
  • img要素
  • script要素
  • CSS
  • form要素のaction属性