Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 强制Facebook身份验证:客户端和服务器端_Javascript_Flash_Security_Authentication_Facebook - Fatal编程技术网

Javascript 强制Facebook身份验证:客户端和服务器端

Javascript 强制Facebook身份验证:客户端和服务器端,javascript,flash,security,authentication,facebook,Javascript,Flash,Security,Authentication,Facebook,我正在用Flash(AS3)构建一个与Facebook紧密集成的社交媒体应用程序——所有用户帐户都通过Facebook connect处理,所有Facebook连接都通过和API的组合处理。我在后端使用服务器端数据管理,包括通过来自Flash的URL请求跟踪用户操作和站点上的数据 我的问题是,我不知道如何防止来自Flash的服务器请求被欺骗;理论上,恶意用户可以跟踪Flash对我的服务器的呼叫,并以(例如)插入垃圾数据并将其与我数据库中给定的Facebook用户ID关联的方式重现这些呼叫。所有身

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

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

我考虑过的一种可能性是使用客户端和服务器都知道的加密方案来来回传递Facebook UID,这肯定比直接传递要好。然而,只要一个有足够时间/耐心的有进取心的黑客打破这个计划(或反编译swf),就会把一切搞砸


无论如何,我可能想得太多了,但这似乎是一个重要的观点,我真的不确定最好的方法。任何反馈都将不胜感激

这是一个合理的担忧,因为您违反了。加密无法帮助此站点,因为恶意客户端将能够获取任何机密


验证客户端的最佳方法是将flash应用程序发送回服务器。然后,服务器必须使用类似的方式连接回facebook,以便服务器可以验证客户端是否与facebook有有效的会话。这应该在每次登录时执行一次,然后您可以向flash应用程序发出会话id(cookie)以访问该用户的数据存储

我花了很多时间想弄明白这一点!我知道这是一个老生常谈的问题,但希望它仍然对你有用,或者至少对其他人有用

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

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

有关更多信息,您可以考虑查看这些页面: PHP- 红宝石


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

Rook,您是否将访问令牌作为有关会话的信息,该会话可供客户端使用,并可由服务器用于连接FB?请告诉您,您的wiki.developers.facebook链接已断开。参考:meta.stackoverflow.com/q/101241/149820这是不正确的。虽然这是实现这一点的一种方法,但更有效的方法是使用客户端(javascript)库设置的cookie。@dlots javascript受攻击者控制,无法实施访问控制。