Проблема в том, что когда пользователь отправляет эту форму без изменения значений, сервер получает значение abc<def
вместо того, что видно на странице abc
Easy.В этом случае HTML декодирует значение, а затем проверяет.
Хотя, как отмечено в нескольких комментариях, вы должны увидеть, как мы работаем с проектом OWASP ESAPI-Java .По умолчанию мы всегда канонизируем данные, что означает, что мы запускаем серию декодеров для обнаружения многократного / смешанного кодирования, а также для создания безопасной строки для проверки с помощью регулярных выражений.
Однако для той части, которая действительно гарантирует вам защиту, вы обычно хотите, чтобы на сервере хранился необработанный текст, а не что-либо, содержащее символы HTML, поэтому вы можете захотеть сохранить неэкранированныйСтрока, если только вы можете безопасно ее кодировать, когда отправляете ее обратно пользователю.
Кодировка - это лучшая защита для XSS, и я на самом деле рекомендовал бы ее ДО проверки правильности ввода, если по какой-то причине вам пришлось выбирать.
Я говорю может , потому что в целом я считаю плохой практикой хранить измененные данные.Это может сделать поиск неисправностей рутиной.Это может быть еще сложнее, если вы используете такую технологию, как TinyMCE, текстовый редактор в браузере.Он также отображает HTML, так что это похоже на работу с браузером в браузере.