繁体   English   中英

执行Facebook身份验证:客户端和服务器端

[英]Enforcing Facebook Authentication: Client-side and server-side

我正在Flash(AS3)中构建一个与Facebook紧密集成的社交媒体应用程序 - 所有用户帐户都通过Facebook连接处理,所有Facebook连接都通过JavascriptAS3 Facebook API的组合来处理。 我在后端使用Codeigniter进行服务器端数据管理,包括通过Flash中的URLRequests跟踪网站上的用户操作和数据。

我的问题是我不知道如何防止欺骗从Flash发出的服务器请求; 理论上,恶意用户可以跟踪Flash对我的服务器进行的调用,并以(例如)插入垃圾数据并将其与我的数据库中给定的Facebook用户ID相关联的方式重现它们。 所有身份验证都在客户端进行(通过Facebook JS API),服务器没有干预,所以我很难确定如何以确保用户的方式确保Flash和服务器之间的呼叫安全必须通过Facebook进行身份验证才能生成它们。

我考虑的一种可能性是使用客户端和服务器已知的加密方案来回传递Facebook UID,这肯定比明确传递它们更好。 然而,只有一个有进取心的黑客有足够的时间/耐心才能打破计划(或反编译swf)以搞砸一切。

无论如何,我可能会过度思考这一点,但这似乎是一个重点,我真的不确定最好的方法。 任何反馈将不胜感激!

我花了很多时间试图弄清楚这个! 我知道这是一个老问题,但希望它对你或者至少其他人都有用。

基本问题就像你说的那样。 如果您正在进行客户端身份验证,但是您希望执行某些特定于用户的服务器端操作,则还需要对系统上的用户进行安全身份验证。 理想情况下,您可能希望避免让他们再次使用密码登录,因为这将是一个糟糕的用户体验。 因此,人们可能会想要发送UID并以这种方式记录它们。 不幸的是,这有明显的安全风险。 正如您所指出的,任何人都可以传递通常是公共知识的UID,并以他们不是的人身份登录。

此问题的解决方案是使用存储在cookie中的信息,在用户成功登录后facebook api会丢弃该信息。 cookie中的信息包含其中的用户信息以及唯一的签名数据。 如果服务器抓取cookie的内容,并且您正确处理它,则应该弹出一个密码。 这个密码应该与您和Facebook知道的应用程序密码完全匹配。 如果确实如此,那么你就知道cookie(因此用户)是合法的。 如果它不相同,那么你就知道有人正在尝试一些有趣的事情。

有关更多信息,您可以考虑查看这些页面:PHP - https://developers.facebook.com/docs/guides/web/#personalization Ruby - http://vombat.tumblr.com/post/835536630/ruby-版本的-Facebook的-获得Facebook的cookie的功能于PHP

我还应该注意到LinkedIn和Twitter都存在类似的方法。

这是一个合理的问题,因为您违反了CWE-603:使用客户端身份验证 加密无法帮助这个站,因为恶意客户端将能够获得任何秘密。

验证客户端的最佳方法是让Flash应用程序将有关会话的信息发送回服务器。 然后服务器必须使用类似php api的东西连接回Facebook,这样服务器就可以验证客户端是否与facebook有效会话。 这应该在每次登录时完成一次,然后您可以向Flash应用程序发出会话ID(cookie)以访问该用户的数据存储。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM