2016-10-21 2 views
0

私はnashorn使用して、ユーザーがサーバー側でファイルをフィルタリングするjavascript関数のカスタムを提供することができるアプリケーションを書いて、サーバー側でユーザーのスクリプトを実行/ JJS:Nashorn/JJSセキュリティ:

cat /etc/js/library.js user.js > tmp.js && 
cat /path/to/input.txt | jjs --language=es6 -doe -J-Djava.security.manager tmp.js > /path/to/output.txt && 
rm tmp.js 

私は、ユーザーが自分のディスクを埋めるために無限ループを書くことができていることを知っている:

for(;;) print("#####); 

しかし、ファイルシステム上のファイルを読み出し/書き込みするために彼を防止するのに十分で-J-Djava.security.managerのですか?

ありがとうございました。

答えて

2

あなたはそうです。 Javaセキュリティマネージャを設定すると、スクリプトは「サンドボックス化」されます。特定のスクリプトに特定の権限を付与する明示的なセキュリティポリシーを作成しない限り、スクリプトにはサンドボックス権限のみが与えられます。安全でないスクリプトを安全に実行できます。特定のスクリプトに特定の権限を付与するには、信頼されたURLからスクリプトをロードし、セキュリティポリシーにこれらのURLを使用する必要があります。https://wiki.openjdk.java.net/display/Nashorn/Nashorn+script+security+permissions

+0

おかげで、それJJSはまだ読み取ることができ逆説的ではありません:

も参照してください。スクリプトファイル 'tmp.js'? (または、このjsファイルを読み込んだ後でセキュリティが有効になっていますか?) – Pierre

+1

いいえ、jjsコード自体には、デフォルトポリシーでAllPermissionが与えられています。コマンドラインで指定されたファイルの初期セットを読み込むので、一貫しているのはjjsコードです。スクリプトが "load"プリミティブを呼び出してさらにスクリプトをロードする場合、スクリプト(読み込みスクリプト)のセキュリティ権限も有効になります。 –