Остановить nunjucks от побега HTML


У меня есть вызов comments ajax, который возвращает данные опубликованного комментария, у меня также есть встроенная функциональность @mention, серверная сторона обрабатывает @mentions и делает str_replace на упомянутых пользователях, заменяя их имена тегом a в ответе, например:

{
   data: {
      comment: "<a href="profile/derp">Username</a> hey what's up"
   }
}

Однако я не могу найти в документации, как разрешить nunjucks печатать это как фактический HTML, он экранирует его и отображает код вместо того, чтобы позволить ему быть реальным тегом.

Есть ли кто-нибудь знаете, как я могу позволить, чтобы это было напечатано как настоящий тег?

Спасибо

3 6

3 ответа:

Итак, почти сразу после того, как я опубликовал это, я нашел ответ! для тех, кто еще ищет, это просто; в вашем шаблоне, где вы печатаете свою переменную, добавьте безопасный фильтр, который отключит автоматическое экранирование.

{{ comment.content|safe }}

Хотя это означает, что он уязвим для инъекции XSS, поэтому убедитесь, что вы добавили защиту на стороне сервера.

Вы также можете избежать глобального побега: nunjucks.configure({autoescape:false});

Вы можете рассмотреть возможность передачи метаданных комментария и позволить шаблону создать HTML:

<p><a href="{{ comment.user.url }}">{{ comment.user.name }}</a> {{ comment.text }}</p>

, а затем передать метаданные следующим образом:

comment: {
    user: { url: "profile/derp", name: "Username" },
    text: "hey what's up"
}