有没有其他人看到这种情况发生?
我正在使用 Facebook PHP SDK 和一些 Javascript 构建 Facebook 画布应用程序。
现在,当我通过 OAuth 身份验证流程引导用户时,我注意到浏览器中的 URL 会自动附加 this "#_=_"
,所以我的 URL 开始看起来像这样:
http://apps.facebook.com/xxxxxxxxxxxx/#_=_
当我重定向到应用配置文件页面时,URL 是这样的:
http://www.facebook.com/apps/application.php?id=xxxxxxxxxxxx#_=_
我正在使用重定向
echo "<script type='text/javascript'>top.location.href='$appcanvasurl';</script>"
到画布 URL,以及
echo "<script type='text/javascript'>top.location.href='$appprofurl';</script>"
用于应用配置文件页面。
那么为什么#_=_
要附加这个呢?
更新:
根据跟踪器上的这个错误,这是设计使然,并且为 提供值redirect_uri
不会改变这一点。
根据该页面上的官方facebook回复(必须登录Facebook才能查看帖子):
这已被标记为“设计使然”,因为它可以防止潜在的安全漏洞。
某些浏览器会将 URL 中的哈希片段附加到它们已重定向到的新 URL 的末尾(如果该新 URL 本身没有哈希片段)。
例如,如果 example1.com 返回到 example2.com 的重定向,则转到 example1.com#abc 的浏览器将转到 example2.com#abc,并且 example2 上的脚本可以访问来自 example1.com 的哈希片段内容.com。
由于可以将一个身份验证流重定向到另一个,因此可以使来自一个应用程序的敏感身份验证数据可供另一个应用程序访问。
通过将新的哈希片段附加到重定向 URL 以防止这种浏览器行为,可以缓解这种情况。
如果结果 URL 的美学或客户端行为受到关注,则可以使用 window.location.hash(甚至您自己的服务器端重定向)来删除有问题的字符。