Смешайте недезинфицированные данные, HTML в переменной шаблона усов

Я пытаюсь передать сообщение шаблону Mustache, который выглядит примерно так:

Указанный вами URL http://example.com недействителен.

Пользователь указывает URL-адрес, поэтому URL-адрес необходимо экранировать. Однако я хочу поместить теги <code> вокруг URL-адреса, чтобы он выделялся из окружающего текста, поэтому теги кода необходимо передавать без экранирования.

Я мог бы написать что-то вроде этого:

{{text_before_url}}<code>{{url}}</code>{{text_after_url}} 

Однако текст сообщения различается и не всегда соответствует этой структуре.

Я также мог бы попробовать вывести необработанный текст с тремя фигурными скобками, {{{messages}}}, и экранировать URL-адрес чем-то вроде htmlentities($url), но если кто-то позже адаптирует программу для передачи нового сообщения и передает данные, не понимая, что их нужно экранировать, тогда у нас большие проблемы с XSS.

Возможно, мне просто не повезло, и я понимаю ценность простого механизма шаблонов, но есть ли способ сообщить Усику, что с HTML-тегами все в порядке, при этом экранируя остальную часть вывода?

Кевин


person Kevin Burke    schedule 03.11.2011    source источник
comment
у меня похожая проблема и пока ничего не нашел, вернусь сюда, если найду ответ.   -  person benstraw    schedule 09.11.2011


Ответы (1)


Использование {{variable}} внутри шаблона для 5 > 2 приведет к 5 &gt; 2, тогда как использование {{{variable}}} (3 уса) приведет к 5 > 2.

См. документация: https://github.com/defunkt/mustache#escaping

person Ronan    schedule 19.09.2013