例如,让我们说我为用户拍照。客户端代码可能会调用mysite.com/api/getProfilePicture?user=000123
,然后我的应用程序将发送回适当图像的URL以加载。在内部,它正在对/v2.6/{user_id}/picture
进行API调用,只是将其接收的用户参数放入该字符串中。我想我希望保留这个服务器端,以便客户不必担心个人资料图片的来源(如果我最后添加,例如,将来有Google+登录)。
这是安全问题吗?一个邪恶的用户可以打电话给mysite.com/api/getProfilePicture?user=destructiveEndpoint
,然后让它运行/v2.6/destructiveEndpoint/picture
吗?或者没有这样的破坏性端点需要担心(因为这里没有使用app秘密)。如果 破坏性端点需要担心,那么我应该确保在使用它之前获得的任何用户ID都是有效的,对吗?
答案 0 :(得分:1)
所以在SQL注入之后现在出现API参数注入:)
如果您只是获取任意字符串并将其放入Graph API URL中,理论上可以想象可能会导致不需要的结果的情况,是的。
但是每个可以创建/更改/删除任何内容的API端点都需要一个访问令牌 - 实际上,/ picture
端点是唯一没有端点的端点。
所以,即使我能够注射"在您的API调用中,最可能的结果是API只会抱怨操作需要有效的访问令牌。
也许我甚至设法注入一个访问令牌 - 但是我很可能也会在你的应用程序之外进行同样的API调用。
目前,Facebook个人资料ID仅包含数字 - 因此,如果您想验证输入,那就是我要检查的内容。 (但FB工程师已经多次表示,未来这种情况也可能发生变化。)