Handlebarsjs“聪明”逃脱

时间:2016-03-18 00:31:23

标签: javascript escaping handlebars.js xss

有没有办法为把手逃脱设置某种设置,所以它省略了特定的标签? 或者,如果有任何一组助手可以做到这一点?

e.g。如果我允许模板中的链接,它将执行以下操作。

  

InputSting =“some< \ a href ='http://link'> out< / a>< \ script> alert('THERE')< / script>”

模板

  

{{InputString}}

编译为:

  

一些out< \ script>提醒('THERE')< / script>

忽略反斜杠,用于保存标签。

1 个答案:

答案 0 :(得分:1)

我尝试了这个小提琴:https://jsfiddle.net/ChristopheThiry/m4fgsxof/

首先在InputString中你需要以不同的方式进行转义,否则javascript会检测到你的脚本标记并将标记关闭在错误的位置:

\<script>alert('THERE')\<\/script>

其次,您可以使用帮助器在输入字符串

上投射Handlebars.SafeString

在你的模板中:

{{#link InputString}}
{{/link}}

帮助声明:

Handlebars.registerHelper('link', function(text) {
  return new Handlebars.SafeString(text);
});