#java #sling #securitymanager #java-security-manager
#java #sling #securitymanager #java-security-manager
Вопрос:
Кто-нибудь запускал Apache Sling с включенным Java SecurityManager? Для этого потребуется специальный файл java.policy, чтобы разрешить действия, выполняемые всеми развернутыми пакетами, и было бы чрезвычайно полезно иметь базовую версию, которая уже допускает то, что необходимо пакетам, поставляемым с базовым Sling Starter, и к которой можно добавить политики для дополнительного развернутого кода.
Мне также было бы интересно, может ли кто-нибудь сказать, что использование SecurityManager неосуществимо в настройках Sling, возможно, из-за его конструктивных свойств (таких как возможность добавлять JSP в JCR во время выполнения).
Справочная информация: Если вы запускаете код нескольких мандантов на одном сервере, может потребоваться отделить их код друг от друга. Хотя в OSGI есть некоторые механизмы для отделения пакетов друг от друга, для вредоносного кода было бы тривиально использовать, например, отражение Java для захвата внутренних данных из сервисов, предоставляемых другими пакетами. Включенный менеджер безопасности мог бы, по крайней мере, сделать это намного сложнее.
(Я понимаю, что даже с менеджером безопасности, вероятно, вполне возможно, что вредоносный код использует ошибки и недостатки дизайна, чтобы получить доступ к ресурсам других пользователей в системе, и что, вероятно, единственным способом серьезно отделить код от разных мандантов было бы использование разных серверов. Но, по крайней мере, можно попытаться усложнить это.)
Комментарии:
1. я не могу ответить на ваш основной вопрос. однако я могу сказать (с достаточной уверенностью), что SecurityManager на самом деле не поможет вам, если вы хотите, чтобы он защищал вас от вредоносного кода в многопользовательской виртуальной машине. SecurityManager может защитить вас от вредоносного кода, выполняющего код , который он не должен, однако он почти ничего не делает для защиты данных . вы, конечно, можете скрыть некоторые привилегированные секреты за барьерами кода, но в сценарии с несколькими арендаторами было бы практически невозможно изолировать все данные для каждого арендатора.
2. @jtahlborn Я признаю, что у меня нет особенно хороших ощущений по этому поводу, но в случае Sling данные клиента помещаются в репозиторий содержимого Java, который имеет контроль доступа. У каждого пользователя есть свой собственный сеанс, и он может получить доступ только к своим данным клиентов через свой API. Итак, если бы можно было запретить пользовательскому коду копаться в его внутренностях с помощью отражения, теоретически он не должен иметь доступа к материалам других пользователей.
3. как SecurityManager предотвращает доступ пользовательского кода к другим репозиториям контента? предположительно, где-то есть корневой объект, из которого находятся эти репозитории. почему для доступа к этим репозиториям необходимо какое-либо отражение? если только все эти общие объекты не защищены вызовами SecurityManager «проверить доступ», которые ограничивают вызывающих только привилегированным кодом?
4. (я признаю, что я ничего не знаю о репозитории содержимого Java, так что, возможно, это как-то защищает вещи?)
5. суть проблемы в том, что большая часть java-кода написана не для защиты от вредоносного кода в той же jvm. таким образом, любая структура данных в общем коде, которая может ссылаться на некоторые данные клиента и имеет открытый доступ, является утечкой безопасности. вам потребуется провести аудит каждой платформы / библиотеки, которая касается данных клиента, чтобы убедиться, что она случайно не предоставляет путь доступа к данным.