Я работаю над предотвращением межсайтового скриптинга (XSS) в веб-приложении на базе Java, Spring.Я уже реализовал фильтр сервлетов, подобный этому примеру http://greatwebguy.com/programming/java/simple-cross-site-scripting-xss-servlet-filter/, который очищает все входные данные в приложение.В качестве дополнительной меры безопасности я хотел бы также очистить все выходные данные приложения во всех JSP.Я провел некоторое исследование, чтобы понять, как это можно сделать, и нашел два дополнительных варианта.
Одним из них является использование атрибута Spring * defaultHtmlEscape
.Это было очень легко реализовать (несколько строк в web.xml), и оно прекрасно работает, когда ваш вывод проходит через один из тегов Spring (то есть: теги message или form).Другой вариант, который я нашел, заключается в том, чтобы напрямую не использовать выражения EL, такие как ${...}
, а вместо этого использовать <c:out value="${...}" />
. Этот второй подход работает отлично, однако из-за размера приложения, над которым я работаю+ Файлы JSP).Это очень громоздкая задача - заменить все несоответствующие выражения EL тегом c:out
.Кроме того, в будущем стало бы обременительной задачей убедиться, что все разработчики придерживаются этого соглашения об использовании тега c:out
(не говоря уже о том, насколько более нечитабельным будет код).
Есть ли альтернативаспособ избежать вывода выражений EL, которые потребовали бы меньше модификаций кода?