Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript page.evaluate()中是否存在phantomJS注入漏洞?_Javascript_Security_Phantomjs - Fatal编程技术网

Javascript page.evaluate()中是否存在phantomJS注入漏洞?

Javascript page.evaluate()中是否存在phantomJS注入漏洞?,javascript,security,phantomjs,Javascript,Security,Phantomjs,使用PhantomJS,您可以通过执行page.evaluate()在浏览器中执行代码。如果我们允许用户指定在浏览器上下文中执行的代码,我们是否打开了攻击向量?有没有一种方法可以从浏览器上下文跳转到phantomJS环境中,从而在服务器上执行命令 下面是一个例子: page.open(options.url, function(status) { var test = function() { return page.evaluate(function() {

使用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()
发生在
页面内。evaluate()
阻止他们逃离已打开页面的上下文。用户javascript字符串作为字符串传递(它不是“编译”到单个javascript文件中)。在我看来,这与用户使用浏览器浏览站点并试图通过他们最喜欢的Javascript控制台进行黑客攻击没有什么不同。因此,这种用法并不代表安全漏洞。这是正确的吗

更新

提供关于确切用例的更清晰的信息。基本要点是,有人将转到url{{javascriptstring}}。当工作程序可用时,它将启动一个虚拟实例,
页面。打开提供的URL,然后当满足
条件时,它将拍摄网页的屏幕截图。这样做的目的是,一些页面,特别是那些包含大量异步javascript的页面,具有奇怪的“就绪”条件,而不像
DOM就绪
窗口就绪
那样简单。这样,在javascript条件为真之前,不会拍摄屏幕截图。示例包括
$(“.domNode”).data(“jQueryUIWidget”).load==true
$(.someNode”).length>0
是的,这是。这是一个可用于劫持用户(或管理)会话并使用户暴露于其他攻击的漏洞


如果输入来自GET/POST、片段或URL的一部分,则很容易被利用。如果输入来自UI,那么它可能是。

我对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做什么讨厌的事情,但这是一个用户可以运行任何他们想要的代码的例子,所以这听起来不是一个好主意。用户字符串可以是一个完整的程序


为了澄清,注入漏洞不在
page.evaluate()
中,而是在代码的
eval
中。

听起来不错。与使用JSFIDLE或其他东西没有什么不同,只要它不是为脚本作者以外的用户执行的。。。但是我可能弄错了。@Wesley Murch是的,除了在JSFIDLE上没有要劫持的会话…@Rook:对,注意到了,但只要第二部分是真的?我不熟悉PhantomJS,因此无法评论“有没有办法从浏览器上下文跳转到PhantomJS环境中,从而在服务器上执行命令?”。。。我们可能还需要更多来自Nucleon的上下文。@Wesley Murch基于dom的xss的要点是在网站上下文中的浏览器上执行javascript,这是一个可用于劫持帐户的严重漏洞。我也更新了我的帖子;。仅当页面对象或其派生对象与其他用户共享时。是吗?@rambo coder否,必须通过片段/URL GET或POST访问。所以攻击者必须能够将用户重定向到此页面。@Rook我不明白。只有当我修改您的DOM时,DOM XSS才起作用。但是,如果你修改了自己的DOM,那有什么害处?@Nucleon
{{USER JAVASCRIPT STRING}}
来自哪里?这是GET、POST还是片段?这是页面上的一个表单吗?即使在编辑之后,我仍然不理解你所指的攻击向量。我如何在自己的窗口中执行javascript,从而对其他人造成伤害?您能否在phantomjs上下文中提供一个具体的例子,它会导致这个问题,以便我更好地理解。我看不到我的场景和XSS/Clickjacking之间的联系。用户字符串可以是整个程序,这完全可以。从PhantomJS docs:page.evaluate:
在网页上下文中计算给定函数。执行是沙盒式的,网页无法访问幻影对象,也无法探测自己的设置。
它与我转到该URL并在窗口中键入
console.log(“”
)有何不同。我可以访问互联网上的任何网站,并使用我的浏览器在其上执行无限量的Javascript。但这并没有什么害处,因为我的黑客攻击不会干扰或影响该网站的任何其他访问者。我认为区别在于:1)代码是在您的服务器上执行的,而不仅仅是在用户的浏览器上执行的(对吧?)。如果您基本上可以让用户将他们想要的任何代码粘贴到您执行
eval()
的位置,那么我想这很好。2) 与Rook的答案相关的是,如果用户可以与嵌入的代码共享链接(看起来是这样),那么您的站点就有可能交付xss负载。甚至一些愚蠢的事情,比如用
while(1){}
或任何其他无限循环来破坏用户的浏览器(或潜在地锁定他们的整个系统),都是因为
eval
函数。例如,在我向将在您的服务器上执行它的页面发送数千个请求之后,无限循环会做什么?或者,如果您将最可能的恶意代码粘贴到
页面。评估
回调,最糟糕的情况是什么?这是你允许的。再一次,危险的是
eval
位。我可能会错过这里的重要细节,所以我期待着你的答复,因为我是