5

ケースクラスから得られる検証は、構成ファイルに必要な検証と同じであるため、構成の「データとしてのコード」のアイデアが気に入っています。Twitter は、これを簡単にする優れた Eval ユーティリティを作成しました ( https://github.com/twitter/util )。ユーザーが設定ファイルをリモート サービスにアップロードできるようにしたいと考えています。これにより、リモート サービスに対してコードを挿入する可能性が開かれます。

たとえば、次の構成ケース クラスがあるとします。

case class MyConfig(param1: String)

ユーザーが次のコマンドを含むファイルをアップロードできるようにしたいと思います。

MyConfig(param1 = "My Param Value")

...しかし、コマンドを含むファイルではありません:

MyConfig(param1 = {import someDangerousPackage; someDangerousCommand(); "My Param Value"})

関数が呼び出されていないことを確認するためにコンパイルを傍受する方法はありますか?

4

1 に答える 1

0

パッケージをインポートせずに危険なコードを追加することができます。rm ... コマンドを発行するには、何行のコードが必要ですか?

最善の解決策は、構成用のコードを送信させないことです。XMLパーサーなどを使用してください。本当に安全な唯一の代替手段は、アップロードを自分で解析し、使用が許可されているキーワード (および引用符で囲まれた文字列) の厳密なホワイトリストと比較することです。この時点で、独自のインタープリターを作成する道半ばであり、まだ多くのミスに対して脆弱であるため、テキスト ファイルの解析は、安全なオプションであると同時に怠惰なオプションのようにも思えてきます。

于 2013-12-14T10:01:47.813 に答える