Смешайте неанизированные данные, HTML в переменной шаблона усов - PullRequest
4 голосов
/ 03 ноября 2011

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

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

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

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

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

Однако текст сообщения может быть разным, и он не всегда будет соответствовать этой структуре.

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

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

Кевин

1 Ответ

5 голосов
/ 19 сентября 2013

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

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

...