ブラウザで実行されている JavaScript をサンドボックス化して、HTML ページで実行されている JavaScript コードで通常利用できる機能へのアクセスを防ぐことは可能かどうか知りたいです。
たとえば、エンド ユーザーが「興味深いイベント」が発生したときに実行されるイベント ハンドラーを定義できるように JavaScript API を提供したいが、そのユーザーがオブジェクトのプロパティや関数にアクセスできないようにしたいとしますwindow
。これは可能ですか?
最も単純なケースとして、ユーザーが を呼び出すのを防ぎたいとしますalert
。考えられるアプローチはいくつかあります。
- グローバルに再定義します
window.alert
。ページ内で実行される他のコード (つまり、イベント ハンドラーでユーザーが作成していないもの) が を使用する可能性があるため、これは有効なアプローチではないと思いますalert
。 - イベント ハンドラー コードをサーバーに送信して処理します。イベント ハンドラーはページのコンテキストで実行する必要があるため、コードをサーバーに送信して処理することが適切な方法であるかどうかはわかりません。
おそらく、サーバーがユーザー定義関数を処理し、クライアントで実行されるコールバックを生成するソリューションが機能するでしょうか? そのアプローチが機能するとしても、この問題を解決するより良い方法はありますか?
ベストアンサー1
Google カハは、ソースからソースへのトランスレータであり、「信頼できないサードパーティの HTML と JavaScript をページにインラインで配置しても安全です。」