2013-07-15 2 views
0

У меня есть ситуация: У меня есть страница, которая использует <c:out> для отображения данных из базы данных, в которой содержание имеет некоторые специальные символы в качестве зарегистрированного товарного знака. Я использую java, jsp, jstl в своем коде. зарегистрированный символ торговой марки отображается как:Ошибка XSS: как предотвратить это?

®

импортирует точно идеально, как:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> 

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

<c:out escapeXml="false" value="${prName}"/> 

Я использую Veracode сканировать мой код, так как я дал здесь: escapeXml="false", Veracode указывает на то, что это уязвимость.

Так что, когда я удалить escapeXml, он показывает, как это так:

<span class="sup">&reg;</span> 

Просьба предложить мне выход из этой проблемы? Любая помощь глубоко ценится.

ответ

0

Поскольку вы разрешаете использовать теги на своей странице, это рассматривается как уязвимость.

Вместо того чтобы писать

<span class="sup">&reg;</span> 

вы могли бы написать

<script>alert("Alert");</script> 

, который будет стойким XSS.

Постарайтесь реорганизовать свой код, чтобы не включать любые теги в ваше значение из базы данных. Кроме того, убедитесь, что значение из базы данных дезинфицировано.

+0

БД поддерживается сторонним поставщиком и не под моим контролем, поэтому не может изменить значение БД. Я должен показать товарный знак на странице после того, как я извлечу его из БД. БД содержит значения XML, если они не экранированы, фактическое значение не печатается на странице. В этом ключе, как я могу дезинфицировать значение, которое я получаю из БД? –

+0

Вы должны использовать некоторую библиотеку, такую ​​как [ESAPI] (https://www.owasp.org/index.php/Category:OWASP_Enterprise_Security_API) для дезинфекции ввода. Также обратите внимание, что извлечение данных из базы данных, которая не находится под вашим контролем, также поступает из внешнего источника. –

+0

Хорошо, лемме. –