« 前のひとこと | トップページ | 次のひとこと »

aboutme:138721

JavaScript で、読み込んだ二つのソースの間(inter-script)で安全に関数を渡す(delegation)の方法を考えていたのだが、現行のバージョンである限り、できなさそうだった。

JRF 2011年5月11日 (水)

↓のコードで inter-script delegation があればいいなってことになって実験していた。

《電子署名の替わりに Loaded Magic》
http://jrf.cocolog-nifty.com/software/2011/05/post.html

JRF 2011年5月11日 0456

二つのソースの認証みたいなののは、(function (){ ...ここにソース... })() で隠蔽化したところで共有鍵を持っておき、sha1 とかのハッシュを取ったメッセージをやり取りすればいいだろう…というところまでは簡単だが、問題は、delegation 関数の「乗っ取り」。

JRF 2011年5月11日 4419

隠蔽化したとき、別のソースで使える関数は、「グローバル変数」に代入しておくしか受け渡しの方法がないようだが、当然、変数なので、そこに別の値がセットされることも置きうる。

だから、↓に似た感じで、中に入って途中の処理を偽装しながら細工するというのに、弱くなる。

《ICカードの迷信をバカにできるほど端末管理できてる?》
http://jrf.cocolog-nifty.com/column/2006/04/post_8.html

JRF 2011年5月11日 8849

だから、まぁ、delegation はセキュリティとか認証とかは使わずに、それ以外の部分で、電子署名的ハッシュ利用をし、arguments.calllee.caller もチェックすれば、それで、偽造を防ぐことはだいたいでき
そうだというところまでは作ってみた。(あくまで私個人はアルゴリズム的には「できてる」と考えた。)

ただ、やっぱり delegation に認証がないのは、後日の侵入チェックなどを考えると苦しい気がする。

JRF 2011年5月11日 8070

要は、読み取り専用書き込み不可の変数ができればいいのだが、JavaScript にはそういうのはなかった。

const, watch, freeze とあったが、どれも対応ブラウザが限られている上に、どれもセキュアじゃない。

const はオブジェクトをそこに入れるのは意味が違うだろうし、watch は誰でも unwatch & watch できるので、watch を使ってないことを知らないのが条件になる。freeze はオブジェクトまるごとなので、window オブジェクトをまるごと freeze できない以上、グローバル変数の書き込みを禁じるようには作用させられない。

JRF 2011年5月11日 6724

ただし、Firefox 4 が対応している ECMA-262 5th edition で導入された Object.defineProperty は、適切に機能すると言えそうである。

《defineProperty - MDC Docs》
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/defineProperty

JRF 2011年5月11日 7356

が、↓で書いたように Firefox 4 には私にとってはまだクリティカルなバグが残ってるので、使えていないんだけど。(なぜか、 caller も使えなかったし。)

《昨晩、Firefox 4.0.1 にアップデートしてみたのだが、Greasemonkey との絡みなどで、いろいろ不具合が出たので、とりあえず 3.6.17 に戻した。》
http://jrf.aboutme.jp/user_statuses/show/138720

JRF 2011年5月11日 0372

typo 「関数を渡す(delegation)の方法」→「関数を渡す(delegation の)方法」。
typo 「置きうる」→「起きうる」。
行修正 「だいたいでき\nそうだ」→「だいたいできそうだ」。
修正 「watch を使ってないことを知らないのが条件」→「watch を使っていることを攻撃者が知らないのが条件」。

JRF 2011年5月11日 2305

« 前のひとこと | トップページ | 次のひとこと »

トラックバック


トラックバックのポリシー

他サイトなどからこの記事に自薦された関連記事(トラックバック)の一覧です。

» aboutme:138720 from JRF のひとこと

昨晩、Firefox 4.0.1 にアップデートしてみたのだが、Greasemonkey との絡みなどで、いろいろ不具合が出たので、とりあえず 3.6.17 に戻した。 続きを読む

受信: 2012-01-04 20:51:09 (JST)