| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Вычисление математических выражений из String |
| Автор: firedrago 16.11.2011, 12:09 | ||
| Всем привет! Есть ли вариант как сделать это красивее, или это самая нормальная и быстрая возможность ?
|
| Автор: priam220 16.11.2011, 17:39 |
| Само появление такой необходимости кажется странным. |
| Автор: firedrago 16.11.2011, 18:41 |
Необходимость появляется тогда, когда юзер сам задает формулу для вычислений, с константами, скобками и т.д. или есть лучшее решение? |
| Автор: Skynin 16.11.2011, 20:35 | ||
Вполне сгодится, как быстрая возможность. Собственно понятие скрипта то и подразумевает - дать пользователю возможность самому вводить, или изменять какие-то алгоритмы в программе. Вопрос правда о безопасности, если пользователь хакер, то ввести может не только мат формулу Так что нужно бы как-то верифицировать вводимое на предмет допустимости операций. |
| Автор: Stolzen 17.11.2011, 09:34 |
| А что пользователь может ввести в данном случае, чтобы похакать программу? |
| Автор: Skynin 17.11.2011, 12:16 | ||
В пределе - считайте что поставил на рабочее место свою программу. По удобству прямого и полного доступа к ScriptEngineManager та же SQL иньекция - просто муки адовы для хакера Вспомнился пример использования, в ERP ADempiere очень много можно кастомизировать с помощью js кода. Защиту не смотрел. В случае с мат вычислениями, можно попробовать организовать проверку на допустимые лексемы и имена констант, и разрешенных функций. Нужно как-то конечно и пользовательские функции разрешить, вносить их в список разрешенных лексем. Но, в конце концов это можно и позже прикрутить, когда первый релиз будет сдан в эксплуатацию. |
| Автор: Stolzen 17.11.2011, 12:58 |
| Любопытно было бы посмотреть на строку, при выполении которой делается что-то типа "rm ~ -rf". И интересно, js который в java, умеет работать с файлами? Ведь в бразуерах на это ограничение. Я так понимаю, что к внутренностям программы просто так из js кода не получишь доступ - там же нет замыкания на переменные метода, из которого вызван скрипт? А вообще по сабжу - мне кажется, что это самое быстрое и простое решение проблемы. Нет нужны заморачиваться с приведением выражения к обратной польской нотации и т.п. Другое дело, что про безопастность выполнения таких скриптов я никогда не думал. |
| Автор: Skynin 17.11.2011, 22:02 | ||||
Он работает со всеми классами из JRE. "Своей" библиотеки у него нет. Только движок JavaScript'а. Вот если Jython подцепить, ну тогда к JRE еще и питоновская библиотека будет.
Зато есть все та же интроспекция, создание объектов и т.д. С некоторыми нюансами. |