面子书在五月启动了 Graph API v2.0, 这个版本以铁腕手法杜绝滥用 API 的 App。
其中一个例子是对 user id 的管制。(以下的例子 ID 纯属虚构)
留意那些 feed 的留言/按赞的那些人名, ID 都不是本身正式的 User ID。如图所示, 1234567890
如果你用它直接呼叫 graph.facebook.com/USER_ID, 是拿不到讯息的。
你必须加上 access token,才能得到相关的讯息。
这个 User ID 是 tied to app 的, 所以正确的说法应该叫 App Scoped User ID。
每个 App 都有对应的 App Scoped User ID。至于面子书是用什么算法让它per App on the fly (请求 /home) 产生这个独特的 ID 就无从得知了。
你必须用 App Scoped User ID 浏览主页, 也就是 https://www.facebook.com/app_scoped_user_id/1234567890
才能 redirect 去 www.facebook.com/USERNAME 主页。
如果直接 https://www.facebook.com/1234567890 (中间没有了 app_scoped_user_id) 你只会得到错误页面。
假设他的正式 User ID 是 543210 (你从 www.facebook.com 所找到的), 如果直接拿来请求 v2.0 API 是不可能的。必须配合 access token, 才能有响应。
直接用 Username 查找也被禁止了。
username field 甚至完全被禁止了。
注: 旁门左道获取 Username 的方法, 我已经回答在 stackoverflow 了。
https://stackoverflow.com/questions/23670557/unable-to-access-users-username-using-facebook-api-2-0/23676500#23676500
注: 从旧ID 转去 app-scoped-id 以及从 Username 转去 app-scoped-id 的方法我已经回答在 stackoverflow 了。
https://stackoverflow.com/questions/23805866/get-facebook-user-id-from-app-scoped-user-id/23937916#23937916
注: 从旧ID 转去 app-scoped-id 以及从 Username 转去 app-scoped-id 的方法我已经回答在 stackoverflow 了。
https://stackoverflow.com/questions/23805866/get-facebook-user-id-from-app-scoped-user-id/23937916#23937916
如果这个 User 授权过这个 App, API 回应是会直接返回那个人在 www.facebook.com 的正式 User ID, 而不是 App scoped ID (注: 为了backwards-compatible )。
但是还有一个重点没说, 就是 /friends API 是只会返回该 App 的用户。当然这个改变是很够力的, 争议请参考 https://stackoverflow.com/questions/23417356/facebook-graph-api-v2-0-me-friends-returns-empty-or-only-friends-who-also-use-m
除了拿不到 non-app 朋友相关的资料, 拿不到 username,其实还有几件改变是让我彻底无语的:
1. Review
2. 最强大的 FQL 的没落
看了这些改变, 那些有做 Facebook device browserless App 的人可以一边谩骂一边把他的 App 丢进垃圾桶了。
那么如果你依赖 API 来下载东西/stalk 人家怎么办? 并非不可能, 只要猜到他/她用什么 APP(要用相关的授权), 然后自己手动模拟授权那个APP 的步骤, 拿到 access token 后, 再用那个 acess token 就可以了。
有些人开始找 graph API 代替 FQL 的方案, 我只能说太天真了, 就算你玩 Graph API 到出神入化, FQL 的强大是无法替代的。
我帮人开了 bug report, 但是那种官腔的回答让我上火, 不 shoot 他不行啊
https://developers.facebook.com/bugs/1468637860040091/
如果你不是做 game app 而是一般功能拿来自己爽的话, 用非法的 ajax 来开发吧~
说了这么多, 有新的东西就会给我带来新的漏洞灵感。靠这赚钱我就不用吃草了。
更新: 由于我在 SO 鼓吹用 /links, 面子书 diam diam 禁止了不同 app 可以看到 links 的。无论如何, 同一个 app 还是可以。这已经不是第一次了, 上次我找到创造 multiple 用户 id 网址的方法, 虽然不算安全漏洞, 但他们也 diam diam 修改阻止这种方法了, 也是没钱收 。
No comments:
Post a Comment