Должен ли я использовать Security Manager в веб-приложениях Java?

Достаточно ли защитить веб-приложение Java с правами пользователя, выполняющего процесс сервера приложений, или разумно также использовать SecurityManager с подходящим файлом политики?

Раньше я делал первое, а не второе, но некоторые клиенты хотели бы, чтобы мы также использовали SecurityManager, который явно давал бы разрешения каждому стороннему компоненту, чтобы убедиться, что там не скрывается какой-либо вредоносный код.

Я видел некоторые контейнеры сервлетов, такие как Resin, чтобы предложить не использовать SecurityManager. чтобы замедлить ход событий. есть идеи?


person Kaitsu    schedule 25.08.2009    source источник


Ответы (3)


Хотя я ненавижу когда-либо рекомендовать не использовать функцию безопасности, я считаю, что SecurityManager больше предназначен для управления ситуациями, когда в JVM выполняется ненадежный или сторонний код. Подумайте об апплетах или сценарии размещенного общего сервера приложений. Если у вас есть полный контроль над сервером приложений и вы не запускаете чужой код, я думаю, что это избыточно. По моему опыту, включение SecurityManager оказывает значительное влияние на производительность.

person Sean Owen    schedule 25.08.2009
comment
В нашем случае сторонним кодом являются различные известные библиотеки ОС. Достаточно много работы, чтобы просмотреть каждую строку кода, чтобы проверить, нет ли потенциально плохого кода. Я доверяю этим библиотекам, но наш клиент немного параноик :) - person Kaitsu; 25.08.2009
comment
Вы должны быть осторожны, прежде чем говорить, что не запускаете чей-либо код. Например, атаки XML External Entity (XEE) можно использовать, если вы анализируете XML, но большинство людей скажут, что это «просто данные». - person bgiles; 29.09.2010

На ваш вопрос нет простого ответа да/нет, потому что это действительно зависит от того, что вы хотите обезопасить и от чего вы хотите это обезопасить?

Например, я использовал SecurityManager для реализации IP-фильтрации и разрешения подключения к моему приложению только IP-адресам из белого списка. Если вы просто хотите запретить доступ к файлам на диске, возможно, лучшим решением будет запуск приложения от имени пользователя с меньшими привилегиями.

Если вы вообще не доверяете сторонним плагинам, помните, что как только вы разрешите выполнение кода плагина, этот плагин может привести к сбою вашего приложения, даже если вы используете SecurityManager. Если ваше приложение загружает плагины, возможно, добавление плагина в белый список и проверка списка перед загрузкой плагина — лучшее решение.

Если вы решите использовать его, вы получите удар по производительности (поскольку JVM будет выполнять больше проверок), но насколько быстро он будет работать, зависит от вашего кода/конфигурации, которая будет выполнять проверки. Мой белый список IP-адресов был довольно быстрым, поскольку он включал поиск только по одному списку; если ваши проверки включают вызов удаленного веб-сервиса и доступ к базе данных, вы можете сильно замедлить работу, но, с другой стороны, даже это не должно иметь значения, если у вас достаточно оборудования и мало одновременных пользователей (другими словами, если вы можете себе это позволить) .

person Domchi    schedule 25.08.2009

Правильно настроить Security Manager в java может быть непросто. Например, если вы не ограничиваете сам диспетчер безопасности, можно обойти всю защиту, просто установив для диспетчера безопасности значение null.

Использование диспетчера безопасности имеет смысл только в том случае, если ваша JVM будет запускать ненадежный код, в противном случае его настройка будет затруднена, потому что вам нужно заранее знать, какие разрешения вы должны установить для каждой функции (например: RMI, сокеты, ввод-вывод) и для каждого клиента.

person Miguel Ping    schedule 25.08.2009