Слушай покопался в теме, стало интересно, у owasp есть просто набор правил который говорит о том что надо чистить данные перед выводом, но это общие правила, которые не учитывают никак твой бэк или вообще стек технологий.
Возникло пару вопросов об XSS
По поводу подмены ввода, которую ты описывал, ведь в двух подходах юзер увидит одинаковый результат, вне зависимости, почистил(или экранировал/подменил) я данные при получении их из инпута перед вставкой в БД или после получения данных из бд во время вывода на фронт.
Если конечный результат одинаковый, тогда зачем мне хранить в базе данных заведомо вредную инфу? И получается не доверять данным, которые в ней находятся.
По поводу кол-ва мест в которых можно провтыкать - похоже что оно абсолютно одинаковое, вопрос в том где тебе их легче отловить (хотя правильно конечно делать и там и там) на входе когда ты точно ожидаешь данные с фронта или каждый раз думать о выводе "а не вводил ли это юзер с фронта"
По поводу prepared statments и валидации абсолютно согласен, хочу понять в чем профит от такого подхода к XSS