Struts 2 кодирует входные параметры, чтобы избежать XSS - PullRequest
4 голосов
/ 09 февраля 2011

У меня есть приложение, созданное с помощью Struts 2. У него есть некоторые проблемы с атаками межсайтового скриптинга (XSS). Я хочу закодировать некоторые входные параметры действий аналогично JSP <c:out value="${somevalue}"/>. Есть ли какой-нибудь простой способ сделать это в Struts 2? Метод Java API подойдет.

РЕДАКТИРОВАТЬ Я нашел это - http://www.owasp.org/index.php/Talk:How_to_perform_HTML_entity_encoding_in_Java

Есть опыт?

Ответы [ 3 ]

10 голосов
/ 09 февраля 2011

Вы можете использовать

<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>

${fn:escapeXml(someValue)}

Существует также Good API JSoup

SanitizeНенадежный HTML

Задача

Вы хотите разрешить ненадежным пользователям предоставлять HTML для вывода на ваш сайт (например, в виде комментариев).Вы должны очистить этот HTML, чтобы избежать межсайтовых скриптов (XSS) атак.

Решение

Используйте jsoup HTML Cleaner сконфигурация, указанная в Whitelist.

String unsafe = 
      "<p><a href='http://example.com/' onclick='stealCookies()'>Link</a></p>";
String safe = Jsoup.clean(unsafe, Whitelist.basic());
      // now: <p><a href="http://example.com/" rel="nofollow">Link</a></p>

Итак, все, что вам в основном нужно сделать, это следующее при обработке отправленного текста:

String text = request.getParameter("text");
String safe = Jsoup.clean(text, Whitelist.basic());
// Persist 'safe' in DB instead.

Существует struts2securityaddons

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

См. Также

6 голосов
/ 09 февраля 2011

Экранирование входных параметров как средства предотвращения XSS имеет ряд недостатков, в частности:

  • Вы не можете быть уверены в назначении конкретных входных данных, поэтому вы не можете выбрать правильную схему экранирования.
  • Экранирующие маски входных данных, отсутствие выхода.Без последовательного экранирования выходных данных вы все равно можете передавать неэкранированные данные в неэкранированные выходные данные случайно.
  • Наличие экранирования усложняет обработку данных.

Поэтому было бы лучше вместо этого применять согласованное экранирование выходных данных..

См. Также:

1 голос
/ 13 мая 2011

Нет простого, готового решения для XSS со стойками 2 метки. OWASP ESAPI API имеет некоторую поддержку экранирования, которая очень полезна, и у них есть библиотеки тегов.

Мой подход состоял в том, чтобы в основном расширить теги stuts 2 следующими способами.

  1. Измените тег s: property, чтобы он мог принимать дополнительные атрибуты, указывающие, какой тип экранирования требуется (escapeHtmlAttribute = "true" и т. Д.). Это включает в себя создание новых классов Property и PropertyTag. Класс Property использует OWASP ESAPI api для экранирования.
  2. Измените шаблоны свободных маркеров для использования новой версии свойства s: и установите экранирование.

Если вы не хотите изменять классы на шаге 1, другой подход заключается в импорте тегов ESAPI в шаблоны freemarker и при необходимости экранировании. Затем, если вам нужно использовать тег s: property в вашем JSP, оберните его тегом ESAPI.

Я написал более подробное объяснение здесь.

http://www.nutshellsoftware.org/software/securing-struts-2-using-esapi-part-1-securing-outputs/

Я согласен, что экранирование не является идеальным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...