Другие респонденты правы: существует много контекстов, через которые может произойти инъекция. Помните, решение должно учитывать оба контекста, в которых может произойти инъекция. Подход черного фильтра (или «известный как плохой») к фильтрации не сработает, поскольку он становится жертвой атак, которые кодируют инъекции с использованием неожиданных наборов символов, творческого использования пробелов и других методов. Для получения дополнительной информации см. OWASP DOM Based XSS . Ссылки на этой странице рассказывают о проблемах.
Что касается решения, рассмотрите Шпаргалку по профилактике OWASP XSS DOM , которую мы только что опубликовали. В Шпаргалке есть несколько наборов инструментов, которые помогут вам реализовать стратегии экранирования или кодирования. Вероятно, МОЙ ЛЮБИМЫЙ подход к обеспечению того, чтобы серверный код, написанный на сервере, кодировался и экранировался соответствующим образом, был JXT . С его кодовой страницы Google:
<!-- Automatically escaped content -->
Hello ${user.getName()}!
<!-- Example tag with 3 different contextual encoding requirements -->
<img src="/profile-photo?user=${user.getId()}"
alt="Photo of ${user.getName()}"
onclick="openProfile('${user.getId()}')" />
<!-- Override the default escape, rare, but occasionally needed: -->
<jxt:out value="${user.getProfileHtml()}" escape="none"/>
Обратите внимание, что это включает в себя автоматическое экранирование для контекстов, а также пользовательский тег, который допускает неэкранированный вывод в случае, если специальные элементы вашей страницы / приложения будут нарушены режимом бланширования корзины.