为了账号安全,请及时绑定邮箱和手机立即绑定

这样用`with`语句使用`eval`是否安全?

这样用`with`语句使用`eval`是否安全?

温温酱 2021-04-12 16:14:00
模板实际上来自同一目录中的index.html文件。上下文可以包含用户输入。const context = { id: 1 };const template = '<html><body>${id}</body></html>';with (context) {  return eval(`\`${template}\``);}我了解XSS保护。我正在寻找有关如何打破此解决方案的示例,用户输入可以以任何方式运行后端代码吗?
查看完整描述

2 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

根据context提供值的方式,可以进行设置context.template。这将更改变量标识符template以引用该属性context.template,并将该属性的值传递到中eval

因此,您可以通过context类似这样的属性来执行服务器端代码

template: "${alert(1)}"

或者,如果context可以为属性赋予函数值,则设置context.eval将允许立即执行该函数。(但是,这不太可行,因为用户输入更有可能被普遍视为字符串。)

您可以通过delete context.template; delete context.eval;在进入该with块之前进行操作来避免这两个问题。


查看完整回答
反对 回复 2021-04-22
  • 2 回答
  • 0 关注
  • 153 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信