JEXLスクリプトを実行するためのサンドボックスを作成しています。そのため、悪意のあるユーザーがアクセスできる変数以外のデータにアクセスできないため、サーバーでDOS攻撃を実行できません。私はこれを誰かのために文書化したいと思っていますし、また、他の人々のアプローチをアプローチに取り入れたいと思います。安全なJEXL(スクリプティング)サンドボックスの作成方法を教えてください。
以下は、私はそれを知ってるもののリストが対処する必要がある:
- のみホワイトリスト上にあるその「新しい」使用してクラスをインスタンス化することができます。
- forNameを呼び出すことができ、どのクラスにもアクセスできるので、どのクラスでもgetClassメソッドにアクセスすることを許可しないでください。
- ファイルなどのリソースへのアクセスを制限します。
- 式の実行に一定の時間しかかからないため、消費するリソースの量を制限できます。
これはJEXLには適用されませんが、あなたが使用しているスクリプト言語に適用することがあります。
- をfinalizeメソッドはファイナライザスレッドから呼び出されるため、オブジェクトがカスタムのfinalizeメソッドを持ってすることはできません。オブジェクトを作成してその中でコードを実行するために使用されているAccessControlContextではなく、元のAccessControlContextで実行されます。