2012-03-26 11 views
2

私はLuaを新しくしていて、設定ファイルでlua構文を制限することができるかどうか尋ねたいですか? configローディングはjailで実行する必要があることは分かっていますが、ロードするconfigファイルにはwhile 1 do endをどのように対処できますか?設定で文字列、代入、テーブルのみを許可する方法はありますか?そうでない場合、luaファイルに望ましくない構文が含まれていないことを確認する最も良い方法は何ですか?唯一の解決策は手動の事前解析ですか?lua設定ファイルを安全にする方法

答えて

7

あなたはすでにLuaで「サンドボックス」について知っているようです。残されているのは、あなたが無限ループのような悪意のあるコンストラクトを言うときです。そして、それを解決するには、停止問題を解決する必要があります。これは実用的ではない。

Nuaより長い時間がかかるとスクリプトが中断されるように、タイマーを設定してLuaインタプリタを実行するだけで、すべての悪意のあるコンテンツを「手動で」解析して欲しいと思うのではないでしょうか? ?

+0

+1他の困難な方法で解決するのではなく、実際的な解決策です – cctan

0

ルアで特定の構文を明示的に禁止する場合は、実際にファイルを自分でスキャンする必要があります。これらの構成要素には、構成ファイルでも有効な用途があるので、ユーザーができることを制限していることに注意してください。

文字列とコメントの内容を無視する単純なLuaレクサーを書くのは難しくありませんが、return以外のLuaキーワードのいずれかでエラーが発生します。適切なサンドボックス化(つまり、呼び出すことのできる関数がない)があれば、悪意のあるものを除外するのに十分なはずです。

また、Lua 5.1では、パーサーが非テキストデータ(つまり、コンパイル済みのLuaバイトコード)を解析しないようにすることはできません。 5.2では、ローダーがテキストのみを認識し、バイトコードを拒否するように強制する特定のAPIサポートを提供しています。

関連する問題