[英]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进行递归转义,但是在每个字符串中用"
替换"
似乎过分,不利于数据绑定。
编辑
供参考,这是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.