Рассмотрим применение:
JS Framework Frontend (например, AngularJS) и REST API Backend (например, Jackson + Spring REST) и некоторые почтовые шаблоны HTML.
каков правильный способ глобальной защиты всей системы от XSS?
Первое, что нужно сделать, это защитить веб-компоненты на внешнем интерфейсе от раскрытия объектов HTML из полей ввода.
Во-вторых, запретить серверным службам создавать HTML-шаблоны (например, HTML-письма), которые могут содержать вредоносные значения из пользовательских полей.
Представьте себе поле, такое как сообщение/комментарий, которое будет содержать теги в стиле Twitter — #tag будет автоматически преобразован в гиперссылку, указывающую на someurl/tags/tag, которая будет построена путем создания HTML-тегов при рендеринге, а затем окончательный div будет добавлен к веб-сайту. . Другим использованием этого типа div было бы встраивание его в почтовый шаблон HTML, который будет отправлен другим пользователям через SMTP.
В таком приложении будут различные поля.
Я не хочу запрещать пользователям вводить не буквенно-цифровые символы из этих полей с помощью регулярных выражений или внутренней проверки. Однако этот вход будет открыт таким образом, что по умолчанию будут разрешены XSS-атаки.
Каким будет правильный способ защитить такие поля? Следует ли это делать глобально, используя фильтр/конвертер/экранировщик Джексона, при отправке значения поля в бэкэнд? Или его следует экранировать каждый раз при открытии каждого места в интерфейсе или почтовых шаблонах?