#javascript #java #security #nashorn #jjs
#javascript #java #Безопасность #nashorn #jjs
Вопрос:
Я пишу приложение, в котором пользователь может предоставить пользовательскую функцию javascript для фильтрации файла на стороне сервера с использованием nashorn / jjs:
cat /etc/js/library.js user.js > tmp.js amp;amp;
cat /path/to/input.txt | jjs --language=es6 -doe -J-Djava.security.manager tmp.js > /path/to/output.txt amp;amp;
rm tmp.js
Я знаю, что пользователь мог бы написать бесконечный цикл, чтобы заполнить мой диск:
for(;;) print("#####);
Но -J-Djava.security.manager
достаточно ли этого, чтобы помешать ему прочитать / записать файл в файловой системе?
Спасибо.
Комментарии:
1. Вы нашли способ запретить пользователю писать бесконечный цикл?
Ответ №1:
Вы правы. Как только вы установите java security manager, ваши скрипты будут «изолированы». Если вы не напишете явную политику безопасности, в которой вы предоставляете конкретные разрешения определенным сценариям, скриптам будут предоставлены только разрешения изолированной среды. Вы можете безопасно запускать незащищенные скрипты. Чтобы предоставить определенные разрешения определенным скриптам, вам необходимо загрузить скрипт с доверенных URL-адресов и использовать эти URL-адреса в политике безопасности:
Смотрите также: https://wiki.openjdk.java.net/display/Nashorn/Nashorn script security permissions
Комментарии:
1. Спасибо, но разве не парадоксально, что jjs все еще может читать файл скрипта
tmp.js
? (или защита активирована после чтения этого js-файла?)2. Нет, самому коду jjs по умолчанию предоставляется AllPermission. Именно код jjs считывает начальный набор файлов, указанных в командной строке, и поэтому он является согласованным. Если ваш скрипт вызывает примитив «load» для загрузки дальнейших скриптов, права безопасности вашего скрипта (сценария загрузки) также вступят в действие.