gpt4 book ai didi

javascript - page.evaluate() 是否存在 phantomJS 注入(inject)漏洞?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:04:11 25 4
gpt4 key购买 nike

使用 PhantomJS,您可以通过执行 page.evaluate() 在浏览器中执行代码.如果我们允许用户指定可以在该浏览器上下文中执行的代码,我们是否会向攻击向量敞开大门?有没有办法从浏览器上下文中逃逸到 phantomJS 环境中,从而在我们的服务器上执行命令?

这是一个例子:

page.open(options.url, function(status) {
var test = function() {
return page.evaluate(function() {
return eval({{USER JAVASCRIPT STRING}});
});
});

var interval = setInterval(function() {
if (test()) {
clearInterval(interval);
// take screenshot, do other stuff, close phantom
}
}, 250);
});

据我了解,eval()发生在 page.evaluate() 内防止他们从打开的页面上下文中逃脱。用户 javascript 字符串作为字符串传递(它不是“编译”到单个 javascript 文件中)。在我看来,这与用户使用浏览器浏览网站并试图通过他们最喜欢的 Javascript 控制台破解没有什么不同。因此,这种用法并不代表安全漏洞。这是正确的吗?

更新

为了更清楚地说明确切的用例。基本要点是有人会去一个 url,http://www.myapp.com/?url=http://anotherurl.com/&condition= {{javascriptstring}}。当工作人员可用时,它将启动一个幻影实例,page.open提供的 URL,然后是 condition被满足,它会截取网页的屏幕截图。这样做的目的是某些页面,尤其是那些具有大量异步 javascript 的页面,具有奇怪的“就绪”条件,不像 DOM ready 那么简单。或 window ready .这样,在 javascript 条件为真之前不会截取屏幕截图。示例包括 $(".domNode").data("jQueryUIWidget").loaded == true$(".someNode").length > 0 .

最佳答案

我对 PhantomJS 不是很熟悉,但是 eval 在运行未知代码时本质上是不安全的。很容易逃避预期的上下文:

return page.evaluate(function() {
return eval({{javascriptstring}});
});

http://example.com/?url=http://anotherurl.com/&condition={{javascriptstring}}

{{javascriptstring}} 等于:

console.log('All your script are belong to us');

我不确定你可以用 PhantomJS 做什么样的讨厌的事情,但这是一个用户能够运行他们想要的任何代码的例子,所以这听起来不是一个好主意。用户字符串实际上可以是整个程序。

澄清一下,注入(inject)漏洞不在 page.evaluate() 中,它在 您的 代码中的 eval 中。

关于javascript - page.evaluate() 是否存在 phantomJS 注入(inject)漏洞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13773478/

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