35

LuaとJavascriptがオブジェクト機能モデルをサポートするかどうかについて、メーリングリストでいくつかの議論cap-talkがありました。環境をを介して呼び出される関数に制限するためのサポートとsetfenv、不変オブジェクトへの偽造不可能な参照の可能性があるため、OCMは実装されました。

これがどのように機能するかを見たことがありますか?私は、Luaで非常に便利で寛大なスクリプトをサポートしている既存のアプリケーションからエクスプロイトを削除することに興味があります。これにより、残念ながら、あらゆる種類のケースで完全なシェルアクセスが可能になります。いくつかのシェルアクセスが必要です。オブジェクト機能モデルは、物事を管理するための良い方法のようです。しかし、私は、このアプローチが、確実に厄介な慣行において実際に検証可能に安全であるという、私がどれほど説得力のある事例を作ることができるかについて心配しています。

いくつかのリンク:

  1. 古いSOの質問:安全なLuaサンドボックスを作成するにはどうすればよいですか?
  2. erights.orgの背景:オブジェクトから機能へ
  3. Lua wiki:SandBoxesReadOnlyTables-動作中のショーsetfenv。適切な状況下で読み取り専用にすることができるテーブルの背後にある基本的な考え方を示しています
4

1 に答える 1

3

Lua と話すことはできませんが、Javascript の場合、Caja には適切なサンドボックスを作成するツールがあり、特定の機能のみへのアクセスを制限しています。もともとは、HTML/JS ウィジェット (iGoogle で使用されているものなど) のサンドボックスを構築するために作成されました。

http://code.google.com/p/google-caja/

ホームページからのプロジェクトの説明は次のとおりです。

Caja (「カハ」と発音) はスペイン語で、箱、銀行、レジ、金庫を意味します。貴重品入れ。Web 開発者は、HTML、JavaScript、CSS などの従来のツールを使用します。また、Caja は、Web アプリケーションを取り込んで「だまされた」HTML Web アプリケーションを生成するコンパイラ (「cajoler」) を提供します。cajoler は、静的分析を実行してセキュリティ プロパティを検証しようとしますが、それができない場合は、入力を書き換えて実行時チェックを追加します。

Web アプリケーションは、Web ページを大量に制御する DOM API などのブラウザー API を一般的に使用するため、Caja は DOM の一部を仮想化する飼いならされた API を提供します。包含ページは、組み込みアプリケーションがページ全体の DOM と対話していると見なすように、組み込みアプリケーションの環境を設定できますが、実際には、仮想 iframe と呼ばれるメカニズムを介して包含ページの境界部分を操作しているだけです。

Caja アプリケーションが使用する JavaScript は、JavaScript のフェイル ストップ サブセット (実際には EcmaScript5) で記述されています。「Valija」と呼ばれるこのサブセットには、ほぼすべての JavaScript 言語が含まれていますが、with などのエラーが発生しやすい構造をいくつか削除し、eval の使用方法を制限しています。

于 2011-02-07T11:45:15.133 に答える