Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.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
Security 为什么新的Facebook Javascript SDK没有违反;同一原产地政策;?_Security_Facebook Graph Api_Same Origin Policy - Fatal编程技术网

Security 为什么新的Facebook Javascript SDK没有违反;同一原产地政策;?

Security 为什么新的Facebook Javascript SDK没有违反;同一原产地政策;?,security,facebook-graph-api,same-origin-policy,Security,Facebook Graph Api,Same Origin Policy,新的Facebook Javascript SDK可以让任何网站以Facebook用户的身份登录,并获取用户的数据 因此,www.example.com包括一些来自Facebook的Javascript,但我记得,该脚本被认为是www.example.com的源代码,无法从Facebook.com获取数据,因为它违反了“同源策略”。对不对?如果是这样,脚本如何获取数据?我认为,但不确定它们是否使用iframe方法。至少canvas应用程序的跨域接收器和xfbml都使用了这一点。基本上,页面上的j

新的Facebook Javascript SDK可以让任何网站以Facebook用户的身份登录,并获取用户的数据


因此,www.example.com包括一些来自Facebook的Javascript,但我记得,该脚本被认为是www.example.com的源代码,无法从Facebook.com获取数据,因为它违反了“同源策略”。对不对?如果是这样,脚本如何获取数据?

我认为,但不确定它们是否使用iframe方法。至少canvas应用程序的跨域接收器和xfbml都使用了这一点。基本上,页面上的javascript会在facebook.com域中创建一个iframe。然后,iframe有权在facebook上做任何需要的事情。与父级的通信可以通过几种方法之一完成,例如url哈希。但我不确定他们对该零件使用哪种方法。

从这里:

同一原产地政策可防止 从一个数据库加载的文档或脚本 起源于获得或设置 来自另一个文档的文档属性 起源。这项政策一直沿用至今 回到Netscape Navigator 2.0

这里的解释略有不同:

同一原产地政策与 如下所示:从加载文档时 一个原点,一个从 无法获取或设置不同的原点 特殊材料的特殊性质 窗口中的浏览器和HTML对象 或框架(见表14.2)

Facebook脚本未尝试与域中的脚本交互或读取DOM对象。它将在Facebook上发布自己的帖子。它获取您的站点名称,不是通过与您的页面交互,也不是通过您站点的脚本,而是因为当您填写表单以获取“like”按钮时生成的脚本本身。我注册了一个名为“”的网站,并获得了要放在我网站上的代码。这段代码中的第一个想法是

iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.bogussite.com&
因此,脚本显然是通过iFrame链接中的硬编码URL参数获取站点信息


Facebook的网站并不是唯一一个让你使用托管在其服务器上的脚本的网站。还有很多其他的脚本是这样工作的。。例如,所有Google API,包括Google Gears、Google Analytics等,都要求您使用托管在其服务器上的脚本。就在上周,当我试图找出如何为我们的store finder为一个移动友好的web应用程序进行地理定位时,我发现了大量的地理定位服务,它们让您使用托管在服务器上的脚本,而不是将脚本复制到您的服务器上。

如果我记得的话,它们使用脚本标签插入。因此,当jssdk调用需要调用Facebook时,它会插入一个
,而不是iFrame。见我回答中的第二句话。iFrame仍然会被限制与父页面上的脚本交互。嗯,我正在查看
方法。。。它如何出现在example.com上并从facebook.com获取数据。当它是iframe方法时,iframe属于facebook.com域,因此它可以访问facebook.com并获取任何数据。因为它没有违反同源策略的规则。它不从主页访问脚本,也不访问主页上的DOM元素。它只是在另一台服务器上对页面执行post。同一原产地政策并不阻止这一点。(如果是这样,就不会有CSRF攻击)。如果它试图从页面上的脚本中读取变量数据并将其传递到Facebook,或者从表单元素中读取并将该数据传递到Facebook,那么这将是一种违规行为。我认为同源策略是,如果HTML页面来自www.foo.com,并且它包含来自www.bar.com的脚本,然后,使用Javascript获取数据仅限于www.foo.com,而不限于其他任何地方。