Песочница безопасности Jasper Report

Я пишу веб-приложение Java, которое я хотел бы позволить пользователям выполнять основные отчеты в формате PDF. Обычно для этого я использую Jasper Reports. Однако на этот раз я хотел бы, чтобы пользователи могли редактировать свои собственные отчеты в iReport и загружать их. Что должно быть достаточно прямолинейным.

Это заставило меня задуматься: Jasper позволяет эффективно писать код в отчетах, который выполняется при создании отчета. Можно ли написать отчет, который имеет полный доступ к Java API и, следовательно, к моему веб-приложению. Я не хочу, чтобы пользователи могли убить tomcat или, что еще хуже, по-прежнему использовать API DAO, который я создал, для чтения данных других пользователей.

Кто-нибудь знает, возможно ли это на самом деле, и если да, то можете ли вы его как-то заблокировать. Может быть, я мог бы как-то отфильтровать отчеты XML до того, как они будут выполнены?

Также кто-нибудь знает, относится ли то же самое к другим инструментам отчетности с открытым исходным кодом, таким как BIRT?


person Charlie M    schedule 23.05.2012    source источник


Ответы (2)


Взгляните на java-песочницу [1], которую мы используем в нашем BI-решении Reportserver [2]. В настоящее время я готовлю сообщение в блоге, в котором объясняется, как запускать jasperreports в изолированной среде.

Что же касается Бирта, то здесь тоже самое. Здесь пользователь не может напрямую писать Java-код, но может использовать Rhino, что в конечном итоге дает тот же эффект.

[1] http://blog.datenwerke.net/p/the-java-sandbox.html [2] http://reportserver.datenwerke.net

person Arno Mittelbach    schedule 31.05.2013

Я выпускаю веб-сервис [1], позволяющий разработчикам создавать PDF-файлы с использованием шаблонов, нарисованных в i-report,

Поэтому мне пришлось решить ту же проблему, моя первая попытка состояла в том, чтобы использовать Java Security Engine API, но это было слишком сложно с большим количеством необходимых разрешений.

Поэтому, пока я искал, как Heroku изолирует каждое веб-приложение, я обнаружил контейнеры Linux (LXC) [2], поэтому я решил изолировать каждую «песочницу разработчика» в контейнере lxc.

Это не мешает пользователям отключать «изолированный сервер», но если они это сделают, они отключат только свою собственную песочницу, песочница других пользователей не пострадает.

[1] http://reports.simpleservic.es/landing [2] http://en.wikipedia.org/wiki/LXC

person Lucas D'Avila    schedule 08.04.2013
comment
Не идеальное решение, так как для этого потребуется удаленный и защищенный доступ к DAO. Но других вариантов я не вижу. - person Gary; 11.04.2013
comment
В моем случае служба поддерживает XML в качестве источника данных вместо источника данных SQL, поэтому доступ к базе данных не требуется. - person Lucas D'Avila; 14.04.2013