可能重复:播放框架追加#=在Facebook验证后通过OAuth2重定向?
还有其他人看到过这种情况吗?
我正在使用Facebook PHP SDK和一些Javascript构建一个Facebook画布应用程序 .
现在当我带领用户完成OAuth身份验证流程时,我注意到浏览器中的URL会自动附加此 "#_=_"
,因此我的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>"
对于应用资料页面 .
那么为什么这个 #_=_
会被追加?
Update:
根据this bug on the tracker,这是设计使然,给 redirect_uri
的值不会改变这一点 .
并根据official facebook reply on that page(必须登录Facebook才能查看帖子):
这被标记为“按设计”,因为它可以防止潜在的安全漏洞 . 某些浏览器会将URL中的哈希片段附加到已重定向到的新URL的末尾(如果新URL本身没有哈希片段) . 例如,如果example1.com返回到example2.com的重定向,那么访问example1.com#abc的浏览器将转到example2.com#abc,而example1.com上的散列片段内容可以访问example2上的脚本.COM . 由于可以将一个auth流重定向到另一个,因此可以从一个应用程序访问另一个应用程序的敏感身份验证数据 . 通过将新的哈希片段附加到重定向URL来缓解此问题,以防止此浏览器行为 . 如果关注结果URL的美学或客户端行为,则可以使用window.location.hash(甚至是您自己的服务器端重定向)来删除有问题的字符 .
1 回答
见:https://developers.facebook.com/blog/post/552/