繁体   English   中英

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

[英]Proper way to interpolate JSON in Express/Jade?

在较旧的框架(Django,Rails)中,这似乎是一个已解决的问题,但我终生无法在Express中找到解决方案。

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

each comment as comments
  div= comment

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

显然,这是不安全的,因为用户可以轻松创建注释来关闭script标签并执行各种修饰。 那么解决这个问题的正确方法是什么?

我见过有人声称您可以通过

JSON.stringify(comments).replace(/<\//g, '<\/')

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

类似地,我编写了一个函数,该函数在字符串化之前html进行递归转义,但是在每个字符串中用&quot;替换"似乎过分,不利于数据绑定。

编辑

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

如果我正确理解您的意思,您是在问如何清理用户输入内容,以防止内容注入攻击,XSS等。

对于这类事情,至少可以使用三个现有的Express中间件软件包。 express-validator具有一些清理功能。 依次使用node-validator 当前版本的node-validator不执行XSS清理,因此请参阅下面的express-sanitizer

备受推崇的helmet中间件具有一些XSS保护功能,可以满足您的部分或全部需求。 如果您正在编写Express应用程序并且完全关心安全性,那么如果您还不了解它,那么绝对应该签出helmet

有一个称为Express express-sanitizer的Express中间件模块。 它似乎是最新的,只有一个贡献者,所以请检查代码以查看它是否满足您的需求并且看起来很成熟。 但是,由于node-validator不再这样做,它正在尝试进行XSS清理。 (请参阅上面的express-validator 。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM