在Express / Jade中插入JSON的正确方法?

时间:2015-05-05 20:34:17

标签: javascript node.js express pug

似乎这是旧框架(Django,Rails)中已解决的问题,但我不能在我的生活中找到Express中的解决方案。

单页webapps中的一个超常见模式是使用模板数据创建html,然后将与JSON相同的数据回显给客户端,以便它可以维持状态。

0.10

显然这不安全,因为用户可以轻松创建一个注释来关闭脚本标记并执行各种恶意。那么处理这个问题的正确方法是什么?

我看到有人声称你可以通过

来结束
each comment as comments
  div= comment

script.
  var comments = !{JSON.stringify(comments)}

但这似乎很幼稚,尤其是在与大型健忘团队合作时。

类似地,我写了一个函数,html在字符串化之前递归地转义,但是在每个字符串中用JSON.stringify(comments).replace(/<\//g, '<\/') 替换"对于数据绑定来说似乎有点过分而且不好。

修改

供参考,这里是Django的解决方案https://docs.djangoproject.com/en/dev/ref/templates/builtins/#escapejs

1 个答案:

答案 0 :(得分:0)

如果我理解正确,那么您就会问如何清理用户输入以防止内容注入攻击,XSS等。

至少有三个现有的Express中间件包你可以看一下这类东西。 express-validator具有一些消毒功能。它反过来使用node-validator。当前版本的node-validator不执行XSS清理,因此请参阅下面的express-sanitizer

备受好评的helmet中间件有一些可能满足您部分或全部需求的XSS保护。如果您正在编写Express应用程序并且完全关心安全性,那么如果您还不知道,请务必结帐helmet

有一个Express中间件模块化express-sanitizer。它似乎是最近的,只有一个贡献者,所以检查代码,看它是否满足您的需求,似乎成熟。但它正在尝试进行XSS清理,因为node-validator不再这样做了。 (参见上面的express-validator。)