私たちのクライアントが私たちのプラットフォーム内で独自のGroovyスクリプトを実行できるようにするつもりです。彼らは制御された方法だけにアクセスすることが許されますが、我々は一つの懸念を持っています。 私たちは可能な限りどこかで注意を払いますが、長時間実行されるループの危険にさらされる可能性があります。その結果、メモリリークや無限ループがプラットフォームに影響する可能性があります。 groovyスクリプトには、このような確率を防ぐための固有の方法がありますか?Groovyスクリプト:可能なメモリリークや無限ループを防ぐ方法
1
A
答えて
0
SecureASTCustomizerを使用すると、ループやすべての危険な構文を防ぐことができます。
ニース記事。
DSL(クライアントが実行できるコード)を制限してオブジェクト上のメソッドを呼び出すことができれば、メモリが漏洩したり濫用されたりすることはありません。
- あなたはおそらく、カスタムクラスを通過するためにあなたのDSL内のすべての関数呼び出しを取得したい方法
addCompilationCustomizers(...)
を使用してカスタム
SecureASTCustomizer
とカスタムCompilerConfiguration
を構築し、それをカスタムCompilerConfiguration
- を渡すことによって、あなたの
GroovyShell
を構築あなたのもの。そのために、あなたのシェルスクリプトを解析してきた、DelegatingScript
としてスクリプトをキャストし、あなたのオブジェクトを渡す:あなたはOSに依存してプロセスに制限を強制することができるように別のJVMで、DemoDSLHelper delegate = new DemoDSLHelper(); // Your custom class with custom methods you want to expose in the DSL GroovyShell shell = new GroovyShell(createCompilerConfiguration()); Script script = shell.parse(scriptText); ((DelegatingScript)script).setDelegate(delegate); Object result = script.run();
ファイル名を指定して実行(コンテナ化など)のためのプリミティブを作成したり、ルール(期間、リソース消費など)を尊重しない場合は単純にそれを削除します。他のことをするJVM内で実行する必要がある場合は、DSLで受け入れる内容を極端に制限する必要があります。
およびhere a gist実行可能な完全な例。
+0
要点Huguesをありがとう。 SecureASTCustomizerは役に立ちます。記事も良いです。 –
関連する問題
- 1. ASP.netの無限ループを防ぐ方法
- 2. 2つのEditTextで無限ループを防ぐ方法は?
- 3. 可能性を防ぐ方法
- 4. JavaScriptのメモリリークを防ぐ方法
- 5. Vue2 + JQueryライブラリ - 必要なコンポーネントの無限ループ、プライベートプロパティを防ぐ
- 6. Prologの無限ループ。これをどうやって防ぐのですか?
- 7. Pythonのサブプロセスで無限ループを防ぐ方法を教えてください。
- 8. Googleの視覚化による無限ループを防ぐ方法setSelection()?
- 9. SQLツリーの無限ループを防ぐためのトリガー
- 10. RxJs:無限ループを防止
- 11. ドラッグ可能なJquery:イメージの移動を防ぐ方法
- 12. ゲームの無限ジャンプを防ぐ方法は?コロナLUA
- 13. Tampermonkey Script - 無限の送信を防ぐ方法
- 14. 防ぐには、スクロール可能なコンポーネント
- 15. PHP円の依存性に無限ループを引き起こすような陥凹のDICを防ぐ方法
- 16. toString()の無限再帰を防ぐ最も効率的な方法は?
- 17. JMX:サーブレットコンテナでClassloaderのメモリリークを防ぐ方法は?
- 18. 次の場合にメモリリークを防ぐ方法
- 19. 防ぐ無効な引数
- 20. Pythonスレッドを閉じてメモリリークを防ぐ
- 21. デプスファーストサーチアルゴリズムが無限ループに陥るのを防ぐために8 Puzzle
- 22. 移動可能な文字が画面外に出るのを防ぐ方法
- 23. Javascript可観測無限ループ
- 24. node.jsスクリプトと可能性のあるメモリリーク
- 25. Boost.thread可能なメモリリーク
- 26. 可能なJInputメモリリーク
- 27. Unity C#スクリプト - ループのない無限ループ...何を待つ?
- 28. Asyncio、無限ループ、無限ループ
- 29. スレッドスターベートを防ぐ方法
- 30. セッションを防ぐ方法
時間を置いてからスクリプトを強制終了してみませんか?ループ自体は有限であるかもしれませんが、今年または次は終了しません。 –