iframeのsandboxを実験してみた
認証系サイトで、
ログインフォームのあるページでの広告利用で、
広告業者はフォーム入力内容見ることができるし、フォームのaction変更することなんかもできちゃう・・・
ってのをどうにかしたくて、
iframeのsandbox試してみた。
広告の方をsandboxしちゃマズイと思うんで、(物によってはいいだろうが)
こっちのフォームの方をsandbox iframeにする実験。
その前にまず、
<input type="password">
のあるログインフォームを広告スクリプトから隠したいんだが、
passwordのvalueってDOM操作したことないんで実験。
まあ、普通に読める。
JavaScriptだけでの認証なんかも考えられるし、当然だよね。
で、次にsandboxせずにiframeして、
親フレームのスクリプトから子フレームのinputのvalueが読めるか実験。
contentDocumentで出来た。
次にsandboxしてみたが、
Firefox12はsandbox非対応なようで変わらず。
Chrome19はsandbox対応なようで、親フレームから子フレームは読めなくなった。
sandboxするとフォームとtarget="_top"が効かなくなるが、
sandbox="allow-forms allow-top-navigation"
で機能するようになる。
これでもDOMで子フレーム読むことは不可。
allow-same-originつけちゃうと読めるようになる。
これで隔離は出来そうだ。
まあ、うちのサイトはFirefox推薦だから今は導入見送りかな・・・
これやる際の問題は、
HTML5でframeborder属性とかなくなって、
親フレームと子フレームを同じように見せたい場合はseamless属性使うようになってる。
んだが、
seamless属性はドキュメントが同一起源じゃないと機能しないようで、
seamlessとsandboxは同時に使えないとかって記述してるサイトがある。
でも、W3C見ると、平気なような・・・
seamlessとsandboxが同時に使えないんじゃマズイな・・・
まあ、W3Cの記述はちょっとわかりにくいから、実験だな。
だが、seamlessはChrome19でもまだ機能しないぽい。
seamlessならwidthとかheightも要らないと思うんで、
inputはサイズ調節が難しいからseamless対応ならその辺も楽だな。
ただ、クロスブラウザ考えると・・・
あと、iframeをsrc使わずにsrcdocで書きたいが、
srcdocもChrome19でダメだった。
seamlessとかsrcdocが使えるようになったらまた実験でとりあえず見送りだな。