Как предотвратить внедрение JavaScript (XSS), когда JSTL escapeXml имеет значение false - PullRequest
0 голосов
/ 17 ноября 2010

У меня есть форма, в которую люди могут добавлять свои вещи. Однако в этой форме, если они вводят JavaScript, а не только текст, они могут легко вводить все, что хотят. Чтобы предотвратить это, я могу установить для escapeXml значение true, но тогда и обычный HTML также будет экранирован.

<td><c:out value="${item.textValue}" escapeXml="true" /></td>

Есть ли другой способ предотвратить внедрение JavaScript, вместо того, чтобы установить для него значение true?

Ответы [ 3 ]

7 голосов
/ 17 ноября 2010

Я бы порекомендовал использовать для этого Jsoup . Вот выдержка из его сайта .

Очистка ненадежного 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.

Jsoup предлагает больше преимуществ, чем это. См. Также Плюсы и минусы парсеров HTML в Java .

2 голосов
/ 17 ноября 2010

Вам необходимо проанализировать текст HTML на сервере как XML, а затем выбросить все теги и атрибуты, которые не входят в строгий белый список. (И проверьте URL в атрибутах href и src)

1 голос
/ 28 ноября 2012

Это как раз и есть цель проекта OWASP AntiSamy .

Проект OWASP AntiSamy - это несколько вещей.Технически, это API для обеспечения соответствия предоставленного пользователем HTML / CSS правилам приложения.Можно сказать и так: это API, который помогает вам убедиться, что клиенты не предоставляют вредоносный код груза в HTML-коде, который они предоставляют для своего профиля, комментариев и т. Д., Который сохраняется на сервере.Термин «вредоносный код» в отношении веб-приложений обычно означает «JavaScript».Каскадные таблицы стилей считаются вредоносными только тогда, когда они вызывают движок JavaScript.Однако во многих ситуациях «нормальный» HTML и CSS могут использоваться злонамеренно.Поэтому мы позаботимся об этом тоже.

Другой альтернативой является проект OWASP HTMLSanitizer .Он быстрее, имеет меньше зависимостей и активно поддерживается руководителем проекта.Я не думаю, что он прошел какие-либо релизы GA / Stable, поэтому вы должны учитывать это при оценке этой библиотеки.

...