Защита страниц шаблонов внутреннего уровня просмотра в приложениях-сервлетах

StackOverflow https://stackoverflow.com/questions/156002

  •  03-07-2019
  •  | 
  •  

Вопрос

У меня есть очень простой вопрос о веб-приложениях MVC на Java.

Со времен использования raw JSP и вплоть до современных технологий, таких как Seam, очень простым шаблоном всегда была внутренняя отправка от контроллера, который изначально принял запрос, на уровень представления, который создает выходные данные для отправки клиенту.

Эта внутренняя отправка обычно выполняется (хотя механизм может быть скрыт за счет дополнительного уровня конфигурации) путем запроса у контейнера сервлета нового ресурса с использованием URL.Сопоставление этих URL-адресов выполняется тем же способом web.xml , который также определяет "реальный" URL-адрес снаружи.

Если не будут приняты специальные меры, часто бывает возможно получить прямой доступ непосредственно к уровню просмотра.Посмотрите демонстрационную версию Seam "регистрация", где вы можете обойти "register.seam" и напрямую перейти к "registered.xhtml".Это потенциальная проблема безопасности.По крайней мере, это приводит к утечке исходного кода шаблона просмотра.

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

Какой самый простой способ ограничить точки входа в URL-адрес?

Может быть, есть что-то вроде каталога "WEB-INF", компонента magic URL path, доступ к которому возможен только по внутренним запросам?

Это было полезно?

Решение 4

Теперь я видел пару приложений, которые помещают свой внутренний JSP в WEB-INF/jsp.Кажется, это помогает, по крайней мере, для JSP, а также для Velocity.IT похоже, это не работает для JSF, хотя.

Другие советы

Вы можете запретить доступ к внутренним ресурсам с помощью security-constraint в вашем web.xml дескриптор развертывания.

Например, я использую следующую конфигурацию, чтобы предотвратить прямой доступ к JSP:

<!-- Prevent direct access to JSPs. -->
<security-constraint>
    <web-resource-collection>
        <web-resource-name>JSP templates</web-resource-name>
        <url-pattern>*.jsp</url-pattern>
    </web-resource-collection>
    <auth-constraint/> <!-- i.e. nobody -->
</security-constraint>

Я бы не рекомендовал разрешать интернет-запросам прямой доступ к вашему appserver.Я бы запустил веб-сервер спереди, а затем в нем разрешил бы запрос определенных типов URL-адресов.Не хотите, чтобы люди ходили в foo.com/jsps ?Ограничьте это там раз и навсегда.

Здесь есть небольшой разговор на эту тему: скрывать страницы за WEB-INF?

Одним из способов справиться с этим было бы создать фильтр сервлетов, который проверяет путь запроса каждого запроса и соответствующим образом обрабатывает каждый запрос.Вот ссылка, которая могла бы помочь вам начать, JavaServer Pages (JSP) и JSTL - Управление доступом с помощью JSP

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top