Facebookなどで、裏技する方法などと言ってjavascript:をアドレスバーにコピペして実行させて、情報を盗んだりするソーシャルエンジニアリングが流行っていて(ニコニコでも似たようなのありましたね)、それを防止するためにブラウザ側が取っている対策を書き出してみたもの。
IE9の場合
- IE9 RC Minor Changes List - EricLaw's IEInternals - Site Home - MSDN Blogs
- IE9 RC マイナーな変更点リスト - 葉っぱ日記
アドレスバーにテキストを貼り付けたときには、javascript: というプレフィックスは削除されます。これは、ソーシャルネットワーク上でよく見られる、ユーザ自身の手によるXSSというソーシャルエンジニアリングなXSS攻撃を軽減します。
IE9 RC マイナーな変更点リスト - 葉っぱ日記
javascript:alert(1);上記をコピペしたときはalert(1);部分だけがアドレスバーに残るという対策。
手動で、javascript:alert(1);と書いて実行した場合はちゃんと実行できる。
実行コンテキスト(実行した際に影響を与える事ができる場所)も表示している現在のページ(
- Chromium Blog: New Chromium security features, June 2011
- Chrome 11~13の新セキュリティ機能まとめ | エンタープライズ | マイコミジャーナル
- Issue 6888 - chromium - Better address bar handling of javascript: (+etc.) URLs - An open-source browser project to help move the web forward. - Google Project Hosting (結構前)
- 該当コミットとかどこー
Chromium 13: defenses for self-XSS via javascript URLs Working together with Facebook and other browser vendors, we’re trialing a self-XSS defense that makes it harder for users to shoot themselves in the foot when they are tricked into pasting javascript: URLs into the omnibox.
Chromium Blog: New Chromium security features, June 2011
Chrome13からIE9と同様にコピペした際にjavascript:部分は削除される。
手動でjavascript:alert(1);と書いて実行した場合はちゃんと実行できる。
実行コンテキストも表示している現在のページ。
Firefoxの場合
- Making your add-ons compatible with Firefox 5 and 6 | Mozilla Add-ons Blog
- アドオンを Firefox 5 と 6 へ対応させるための注意点 « Mozilla Developer Street (modest)
- Bug 656433 – Disallow javascript: and data: URLs entered into the location bar from inheriting the principal of the currently-loaded page
ロケーションバーへ入力された javascript: と data: URL が、現在表示されているページの権限を継承しなくなりました
アドオンを Firefox 5 と 6 へ対応させるための注意点 « Mozilla Developer Street (modest)
Firefox6からこの変更が適応されている。
IE9やChrome13とは異なるアプローチで、javascript:alert(1);とコピペする際には何も起こらない。
しかし、アドレスバーでjavascript:を実行する際のコンテキストが異なるようになったため、javascript:で実行するスクリプトは表示しているページに影響を与えることができない。(多分DOMが使えないので多くのスクリプトはエラーになる。)
実際にFirefox/6.0a2で適当なページを開いてやってみると、windowオブジェクトが存在しないというエラーになった。このようにそのページのDOMにアクセスできないようにする事で、ユーザ自身によるXSSを行えなくしている。
これはアドレスバーから実行するものを無害化するために導入されたので、通常のブックマークレットからの実行やaの埋め込みからの実行などは問題なく動作する。
<a href="javascript:...>HOGE</a>
function evalInPage(fun) {
location.href = "javascript:void (" + fun + ")()";
}
evalInPage(function(){
alert(1)
});
data:スキームURLにも適応される。
ロケーションバーからjavascript:を実行する愛好家達には不便になるかもしれない。(@hasegawayosukeさんとか)
愛好家達の対応策としては
- それ専用のブックマークレットを作る
- 多くの場合evalInSandboxからの実行でも動作は異ならないのでxqjsなどのアドオンを使う。
- Firebugはevalで実行してるのでそれを意識して書く
Firefox6ではScratchpadっていうものが標準でついている。(これはどういう風に実行されてるかは知らない、多分evalInSandboxだと思うけど)
など。
おまけ
FirefoxではNoScriptを使う事で、Firefox6未満でも同様の効果を得られます。(この動作だけを得たいという人はほとんどいないと思いますが…)
0 コメント:
コメントを投稿