我正在创建一个Facebook应用程序。 Facebook在iframe中显示应用视图,并在POST参数中提供signed_request。
如果有人获得了其他的signed_request字符串,他可以将其发布到应用程序。
curl -F "signed_request=CCuTU8c2…NjMwOTMxIn0" https://app.mydomain.xx/
Signed_request是篡改的。另一方面,应用程序接受未调节的数据。
Facebook应用程序应该检查一下吗?例如,issued_at的值。我想知道如何处理signed_request。 Facebook的PHP SDK将其设置为cookie。没关系?
答案 0 :(得分:2)
这不能伪造,如果你正确检查。它是JSON
数据对象,已使用您的application-secret
加密。攻击者无法使用此密钥进行加密,因为您永远不会让任何人知道它,对吧? - 如果你曾经泄露过你的application-secret
,你还会以其他许多方式严重受伤;伪造的signed_request
是你最后的担忧。
您需要解密数据并解析结果JSON
以确保它与您收到的请求相匹配。如果攻击者发送的signed-request
已经从之前的使用中嗅过,那么他不能只是通过任意请求发送它,因为它只会匹配它被盗的请求。 但是您的代码负责执行此检查。这可能是您的Facebook API客户端库的一项功能,具体取决于所使用的库和配置。
请参阅signed request page at Facebook Developers
有关Facebook安全性的进一步阅读,请参阅OWASP上的优秀Developing Secure Facebook Apps文档。