Можно ли «замочить» двигатель JavaScript в Java? - PullRequest
2 голосов
/ 01 февраля 2020

В моей программе есть действительно полезная функция (написанная на Java), которая позволяет пользователю оценивать JavaScript функции и выражения. Это действительно полезно для быстрой математики и в тех случаях, когда вам просто нужно набрать l oop.
. Однако я пришел к выводу, что существует бесконечная возможность для атаки с внедрением кода: ввод exit() приведет к выходу из целого программа, например. И поскольку он запускает сервер JS, это ОГРОМНАЯ проблема.

Это моя функция (java код):

ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByName("JavaScript");
try {
    this.send(engine.eval(message /*user javascript*/).toString());
} catch (ScriptException e) {
    this.send("[ERROR] the expression was invalid and caused an exception. See the console for more details.");
    e.printStackTrace();
}

Есть ли способ настроить это так что движок javascript не может получить доступ к таким функциям? Действительно удобно иметь возможность определять простую функцию без необходимости go и, например, открывать интерпретатор python, поэтому важно, чтобы у меня была эта небезопасная функция.

...