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

模板实际上来自同一目录中的index.html文件。上下文可以包含用户输入。


const context = { id: 1 };

const template = '<html><body>${id}</body></html>';

with (context) {

  return eval(`\`${template}\``);

}

我了解XSS保护。


我正在寻找有关如何打破此解决方案的示例,用户输入可以以任何方式运行后端代码吗?


温温酱
浏览 154回答 2
2回答

蝴蝶不菲

根据context提供值的方式,可以进行设置context.template。这将更改变量标识符template以引用该属性context.template,并将该属性的值传递到中eval。因此,您可以通过context类似这样的属性来执行服务器端代码template:&nbsp;"${alert(1)}"或者,如果context可以为属性赋予函数值,则设置context.eval将允许立即执行该函数。(但是,这不太可行,因为用户输入更有可能被普遍视为字符串。)您可以通过delete context.template; delete context.eval;在进入该with块之前进行操作来避免这两个问题。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript