У вас есть проблема с обратной инженерией программиста. Вы отменяете решения, принятые предыдущими программистами!
Проблема, с которой вы столкнулись, заключается в том, что правила экранирования в атрибутах HTML отличаются от правил экранирования между тегами, поэтому мы разделяем эти экранирующие функции, потому что они не 1: 1. IE
<textarea>{{HTMLEscapingIsDoneHere}}</textarea>
<span background="[HTMLAttributeEscapingIsHere]"> ...
HTML экранирование охватывает гораздо больше символов, чем HTML кодирование атрибутов. Опасность заключается в том, что вы можете избежать намного большего, чем предполагали, тем самым нарушив некоторые другие функции, такие как селекторы css или jquery, которые могут пытаться ввести эти значения атрибутов и теперь потерпят неудачу, потому что вы ' ve слишком много ускользнул, и эти функции ожидали открытый текст, а не HTML атрибуты. Сами по себе Handlebars могут иметь некоторую функциональность, которая включает ключи для значений атрибутов, которые сломаются, если вы HTML -Escape их. [Я не знаю, я никогда не использовал его ..]
Если вы обратите внимание на то, что ускользает спереди, а что ускользает сзади, предыдущие разработчики были последовательны в том, что единственный экранированные вещи были вашими HTML атрибутами ... тогда я бы поставил 50 долларов на то, что они попытались экранировать все как полное HTML, что-то сломали, а затем придумали экранирование бэкэнда как самое простое решение в то время. Если бы они были непоследовательными, что ж, все ставки отключены. подход, который вы можете создать в будущем несовместимость с другими динамическими c фреймворками. Если вы не можете сказать, я уже сталкивался с этим раньше. Задача бизнеса - принять или отвергнуть этот риск.
Мое первое предложение: если вы работаете с ручками В JSP, просто импортируйте библиотеки тегов ESAPI и используйте там функции кодирования. Некрасиво? Конечно. Вы используете более одного фреймворка FE.
Мое второе предложение, поскольку вы, вероятно, женаты на рулях, - это обернуть функции кодирования esapi, которые вы хотите использовать, здесь и ввести их в рули. Например, в JSP у вас есть библиотеки тегов, которые позволяют либо использовать ESAPI, либо писать собственные оболочки. Поскольку я знаю, что ESAPI никогда не создавался с учетом ручек, я бы написал функции оболочки и явно экранировал HTML с помощью ручек и атрибутов HTML с вашими вставленными функциями ручек. Если у руля нет возможности вставлять собственные экранирующие функции, я боюсь, что бэкэнд-экранирование - следующая лучшая альтернатива. Предыдущие разработчики видели ценность в разделении этих экранирующих функций, но не смогли сделать это в коде FE.
Что касается более широкого вопроса: «Безопасно ли экранировать атрибуты как HTML вместо HTML Атрибуты "это один из тех ответов" да, но ... ", где я уже обошел подводные камни. Большинство этих подводных камней go устраняются при использовании структуры одностраничных веб-приложений, но это потому, что вы нормализовали все взаимодействие клиент / сервер до Javascript. Это тоже нехорошо c, но стрелка должна быть в колчане вашего подрядчика.