#java #javascript #security #rhino
#java #javascript #Безопасность #rhino
Вопрос:
Если я оцениваю код Javascript, отправленный из браузера, на сервере (Java webapp с использованием Rhino Javascript Engine), представляет ли это угрозу безопасности?
Удаление Javascript выполняется только для того, чтобы узнать, является ли это допустимым Javascript.
Я не ожидаю, что оценка вернет мне что-либо. Я не ожидаю, что он что-либо сохранит или к чему-либо прикоснется. Все, что нужно сделать, это сообщить мне, отправил ли пользователь действительный javascript.
Если это создает проблемы с безопасностью, могу ли я предпринять некоторые шаги, чтобы убедиться, что JavaScript не причинит никакого вреда системе?
Комментарии:
1. Допустимый JavaScript может использоваться для нанесения вреда системам; вам решать, что является вредным, а что нет. Я думаю, вам нужно переосмыслить свою модель безопасности здесь. Поможет публикация дополнительной информации о том, что вы собираетесь защищать или что вы намерены предотвратить.
2. Если вы просто хотите убедиться, что введенный javascript действителен, то вам нужно только правильно его скомпилировать?
Ответ №1:
Да, это создает угрозу безопасности, потому что из JavaScript внутри Rhino можно получить доступ к чему угодно во время выполнения Java, включая (например) все java.io
классы.
Вы можете убедиться, что все ваши вызовы Rhino выполняются под юрисдикцией SecurityManager, который ограничивает практически все. В коде JDK ScriptEngine нет встроенного способа сделать это; Я не знаю о том, какие инструменты доступны для Rhino, используемые с хуком Mozilla.
Комментарии:
1. Версия Rhino на JDK должна ограничивать возможности скрипта разрешениями, доступными при запуске скрипта. Однако по умолчанию он будет иметь доступ к коду вашего приложения, который обычно не будет безопасным.
2. Правильно, вот что я имею в виду — довольно часто что-то вроде веб-сервера запускается без ограничительного менеджера безопасности, и даже если он есть, он, вероятно, более разрешительный, чем то, что вы хотели бы передать любому случайному скрипту, размещенному на общедоступном URL 🙂