Я не использую JavaScript ни на одной из страниц просмотра. Даже если я использую, действительно ли мне нужно реализовать код для обхода атаки XSS.
Вы можете быть уязвимы для XSS, даже если вы не используете JavaScript на своих страницах. XSS возникает, когда вы включаете контент, контролируемый злоумышленником, без правильного кодирования.
Каждый раз, когда вы делаете что-то вроде
response.write("<b>" + x + "</b>")
если злоумышленник может заставить x
содержать HTML-код, содержащий JavaScript, тогда вы уязвимы для XSS.
Решение обычно состоит в том, чтобы не писать большие объемы кода. Обычно решение заключается в кодировании $x
и любых других значений, контролируемых злоумышленником, перед включением их в создаваемый вами HTML-код.
response.write("<b>" + escapePlainTextToHtml(x) + "</b>")
Фильтрация или дезинфекция входных данных может помочь обеспечить дополнительный уровень защиты.
<shameless-plug>
Вы также можете использовать язык шаблонов, который автоматически кодирует выходные данные для защиты от XSS.
Шаблон закрытия является одним из таких вариантов для Java.
Контекстное автоэкранирование работает путем расширения шаблонов закрытия для правильного кодирования каждого динамического значения в зависимости от контекста, в котором оно появляется, что обеспечивает защиту от уязвимостей XSS в значениях, контролируемых злоумышленником.
EDIT
Поскольку вы используете JSF, вы должны прочитать о XSS-смягчении в JSF :
Выходной текст выхода
<h:outputText/>
и <h:outputLabel/>
по умолчанию имеют атрибут escape, установленный в True. Используя этот тег для отображения выходных данных, вы можете уменьшить большинство уязвимостей XSS.
SeamTextParser и <s:formattedText/>
Если вы хотите разрешить пользователям использовать некоторые основные теги html для настройки своих входных данных, JBoss Seam предоставляет тег <s:formattedText/>
, который позволяет использовать некоторые основные теги html и стили, указанные пользователями.