Javascript 使用js从页面选项卡查找当前页面

Javascript 使用js从页面选项卡查找当前页面,javascript,facebook-page,Javascript,Facebook Page,我有一个Facebook应用程序,在许多页面上安装了一个页面标签 我知道我可以解析、服务器端、已签名的_请求,并在页面上拥有我需要的所有数据、当前用户等 但是,我只需要知道使用客户端JS的页面ID,甚至页面URL(因此,无法访问通过POST、PHP或其他服务器端语言发送的签名请求) 有没有办法单独获取这些信息?即使未签名且不安全 我真的很想在设置服务器端进程之前知道这是否可行,但是即使答案是“不,你做不到”,请给出一些动机,说明为什么知道当前页面的唯一方法应该是服务器端脚本,如果Faceboo

我有一个Facebook应用程序,在许多页面上安装了一个页面标签

我知道我可以解析、服务器端、已签名的_请求,并在页面上拥有我需要的所有数据、当前用户等

但是,我只需要知道使用客户端JS的页面ID,甚至页面URL(因此,无法访问通过POST、PHP或其他服务器端语言发送的签名请求)

有没有办法单独获取这些信息?即使未签名且不安全



我真的很想在设置服务器端进程之前知道这是否可行,但是即使答案是“不,你做不到”,请给出一些动机,说明为什么知道当前页面的唯一方法应该是服务器端脚本,如果Facebook提供了一种以不安全的方式了解当前页面的方法,那么可能会出现哪些安全违规行为。

使用
window.top.location
可以获取页面选项卡的完整URL。然后您可以从那里解析ID

已签名的\u请求(http://developers.facebook.com/docs/authentication/signed_request/)是调用
FB.getLoginStatus()时的
authResponse
的一部分(https://developers.facebook.com/docs/reference/javascript/FB.getLoginStatus/)

在签名的请求中是页面id

但是,要使其起作用,您需要对应用程序的用户进行身份验证。但至少您可以在客户端完成这一切,而不需要任何服务器端脚本。另一个需要记住的非常重要的事项是,你需要你的应用程序机密来解析签名的请求,而在你的客户端公开这个关键的机密项目可能会非常危险

如果您的需求表明您既不能对用户进行身份验证,也不能在服务器端处理已签名的请求,那么您将无法在客户端获取页面id

为了安全起见,请在服务器端处理已签名的_请求。:)


快乐编码

我尝试使用document.referer,但由于Facebok使用代理PHP加载iframe,因此这不是获取当前页面URL的方法。在您的场景中,您没有访问PHP或其他服务器端语言的权限吗?能否将签名的请求作为javascript变量输出?或者这是不可行的?我知道你说过你想要一个JS唯一的解决方案,我只是不知道为什么。如果您能够以某种方式将签名的_请求输出到javascript,那么您可以继续在javascript中进行解析。Simone并不是说它是安全的。很简单,facebook没有以任何其他方式提供页面id。这就是为什么没有办法绕过它。您仍然可以使用CDN为页面选项卡提供服务。您只需要一个带有一些php(或其他后端语言)的页面来捕获页面id,然后将其转发给您的CDN。如果这是您的专长,那么您只需在@CoderFromOuterSpace提交一个功能请求,谢谢。很遗憾,(如您的回答中所述)您需要连接用户才能真正获得签名请求!您也可以在不公开私钥的情况下解析已签名的请求,只是无法验证它是否已签名,但仍然可以解析它。但是,正如您所说的,要么用户已登录,要么您只能在服务器端访问它:(是的,就是这样。要么希望用户不是在客户端处理代码而不使用私钥来欺骗你的代码,要么公开私钥并在客户端正确处理它,或者按照Facebook的建议在服务器端进行处理。如原问题中所问“有没有办法单独获取这些信息?即使未签名且不安全?"。因此,这种方法是未经签名且不安全的。@DMCS我给你奖金,因为你的答案与我期望的非常接近。不幸的是,不是这样的:由于window.top来自www.facebook.com域,而我的iframe来自我的域,浏览器不允许mw读取window.top.location。它会引发安全问题rning并返回一个空位置。oops!Downvote:(这对我们的应用程序有效。也许我们在身份验证过程中这样做了…@DMCS事实上我在投票!我看到我的问题被否决了,然后看了看你的声誉()选项卡,并在那里看到了与我在“声誉”选项卡中看到的-相对应的我的答案的-中。我现在看到这两个条目都已消失并被清除。感谢您修复。删除我的上述评论。@DMCS尼斯跟踪您必须向FBI申请;)
{
    status: 'connected',
    authResponse: {
        accessToken: '...',
        expiresIn:'...',
        signedRequest:'...',
        userID:'...'
    }
}