模板实际上来自同一目录中的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
块之前进行操作来避免这两个问题。
添加回答
举报
0/150
提交
取消