gpt4 book ai didi

javascript - 以这种方式将 `eval` 与 `with` 语句一起使用是否安全?

转载 作者:行者123 更新时间:2023-11-30 19:39:19 25 4
gpt4 key购买 nike

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

const context = { id: 1 };
const template = '<html><body>${id}</body></html>';
with (context) {
return eval(`\`${template}\``);
}

我知道 XSS 保护。

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

最佳答案

根据 context 是如何提供值的,可以设置 context.template。这会将变量标识符 template 更改为引用属性 context.template,并将该属性的值传递给 eval

因此,您可以通过 context 属性执行服务器端代码,例如

template: "${alert(1)}"

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

您可以通过执行 delete context.template; 来避免这两个问题;在进入 with block 之前删除 context.eval;

关于javascript - 以这种方式将 `eval` 与 `with` 语句一起使用是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55578761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com