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