阻止nunjucks逃避HTML

And*_*ira 9 javascript template-engine nunjucks

我有一个注释ajax调用返回发布的注释的数据,我还内置了@mention功能,服务器端正在处理@mentions并对提到的用户做一个str_replace用响应中的一个标签替换他们的名字,例如:

{
   data: {
      comment: "<a href=\"profile/derp\">Username</a> hey what's up"
   }
}
Run Code Online (Sandbox Code Playgroud)

但是我似乎无法在文档中找到如何允许nunjucks将其打印为实际的HTML,它会将其转义并显示代码而不是让它成为真正的标记.

有谁知道如何将其打印为实际标签?

谢谢

And*_*ira 40

好吧,我发布后我几乎立即找到了答案!对于任何其他人来说,只是这个; 在您打印变量的模板中添加安全过滤器,这将禁用自动转义.

{{ comment.content|safe }}
Run Code Online (Sandbox Code Playgroud)

虽然这意味着它易受XSS注入攻击,但请确保在服务器端添加保护.

  • 这让我很困惑,因为当我最初看到过滤器时,我认为它是*相反的*——保险箱会转义 HTML。 (2认同)
  • 你救了我 :) (2认同)

jib*_*ibe 8

您还可以避免全局转义: __CODE__

  • 虽然你几乎不想这样做. (4认同)

Ja͢*_*͢ck 5

您可以考虑传递评论的元数据并让模板创建 HTML:

<p>
  <a href="{{ comment.user.url }}">{{ comment.user.name }}</a> {{ comment.text }}
</p>
Run Code Online (Sandbox Code Playgroud)

然后传递以下元数据:

comment: {
  user: { url: "profile/derp", name: "Username" },
  text: "hey what's up"
}
Run Code Online (Sandbox Code Playgroud)