2

Java アプリケーションで JRuby を使用して、ユーザーがスクリプトを実行できるようにしています。アプリケーションの通常の機能に必要な操作のセットは大きくありません。スクリプトは、Java コードのいくつかの変数を制御し、実行中にプロセスを変更する必要があります。

そのため、許可される操作の数を制限する機会が必要です。たとえば、ユーザーにファイル システムへのアクセスを許可したくありません。

f = File.new("myfile.txt", "w") 
f.puts( "Hello!" ) 
f.close

これは禁止されるべきです。

どうすればそのような設定を行うことができますか? 私が持っている唯一のアイデアは、起動前にユーザースクリプトを解析し、スクリプトを許可された操作のホワイトリストと比較することです.

4

2 に答える 2

4

すべきことは、許可されたコマンドのホワイト リストを作成することです。スクリプトにホワイト リストにないコマンドが含まれていることが判明した場合は、スクリプト全体を拒否する必要があります。Andrew Thompson が指摘するように、セキュリティ マネージャーは優れた追加レイヤーですが、セキュリティ レイヤリングの終わりではありません。サンドボックス化されたアプレットで実行しても、スクリプトが有効かどうかを最初から判断する必要があるため、実際にはそれほど多くは得られないと思います。

ホワイトリストの例

通常、ホワイト リストを生成する場合、ユーザーが選択できるようにするオプション/コマンドの数には制限があり、残りは破棄されます。列挙型または最終的なデータ構造を作成します (実行時に悪意のあるプログラムによって変更される可能性を最小限に抑えるため)。fooユーザーに関数を呼び出すオプションのみを持たせたい場合は、次のbarようなものを書くことができます。これは完全に原始的ですが、概念を示しています。

class WhiteList  
{  
     allowedCommands = ["foo"];  
}  

そして、あなたのメインでは次のようなものです:

class Main  
{  
     for(Command command in userInput)  
     { 
           if(command not in allowedCommands)  
           {  
                log security message;  
                continue/break
           }  
     }  
}  
于 2012-12-15T19:27:35.553 に答える
1

ユーザーコードに1をインストールします。または、さらに簡単に、サンドボックス化されたアプレットまたはJWSで起動されたアプリケーションからコードを実行します。SecurityManager

  1. セキュリティマネージャは、アプリケーションがセキュリティポリシーを実装できるようにするクラスです。これにより、アプリケーションは、安全でない可能性のある操作や機密性の高い操作を実行する前に、その操作が何であるか、および操作の実行を許可するセキュリティコンテキストで試行されているかどうかを判断できます。アプリケーションは、操作を許可または禁止できます。

于 2012-12-14T16:20:42.263 に答える