ユーザーが生成したJavaScript関数がデータベースに保存され、代わりに他の多くのユーザーに提供されるアプリケーションを構築しています。スクリプトは、管理者権限を持つ人物によって検証される必要があります (信頼できる人物である必要がありますが、スクリプトはユーザー自身によって選択されるため、一種の検証が必要と思われます)。
実行される関数は、計算目的のためだけの主要なものです。DOM へのアクセスや (少なくとも現時点では) グローバル オブジェクトは必要ありません。
ユーザーが文字列の単語をカウントする関数を定義するとします (簡単な例として)。
現時点での私のアプローチは、関数をクロージャーでラップし、入力プロパティを持つオブジェクトを渡し、その中にローカル var ウィンドウを定義して、このグローバル オブジェクトにアクセスできないようにすることです (明らかに、これでは十分ではありません。ウィンドウのすべてのプロパティを反復処理します)。オブジェクトとそれらをローカルで定義することは可能かもしれませんが、その見返りにいくつかの重要な機能が壊れる可能性があり、十分ではありません)
次のアイデアは、関数をオンザフライで ADsave 呼び出しにラップして、有害な可能性がある機能 (およびグローバル スコープへのアクセス) を防ぐことでしたが、これには、JSLint / adsave オプションをオンザフライで使用してコードを検証する必要があります。 (そして、これを行う方法に関する資料が見つかりません... !)
次のアプローチは、Caja のようなものを使用することです (実際には、JavaScript コードを Caja バージョンのコードに「変換」する必要があるため、新しい関数を簡単に追加する可能性がなくなります (これは、私自身のアプリケーションでは実行できません)。 -はえ)。
関数がサーバーから返されるたびに (クライアントで作成されたときだけでなく) 関数を検証する必要があるため、これまでのところ ADsave が最適なソリューションのようです。
上記の問題に対する解決策 (またはおそらくより良い解決策 - サードパーティの jscript (一部の DB から提供される) を安全な方法で実行することは、今日では非常に一般的なタスクです) を持っている人はいますか?