似乎这是旧框架(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
答案 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
。)