【发布时间】:2011-04-02 23:23:45
【问题描述】:
首先,如果有一个真正的官方方式让 flash/flex 的NetConnections 篡夺周围网页的 session/cookie 状态,这样如果用户已经登录,他们就不需要要再次提供凭据以建立 AMF 连接,请立即阻止我并发布官方答案。
除此之外,我假设不存在,因为我已经搜索过它似乎不存在。我已经编造了一种方法来做到这一点,但想要一些关于它是否安全的反馈。
- 由于 django 中间件,访问 flash 对象的包装页面将始终转到安全 https
- 当页面视图在 Django 中加载时,它会创建一个“会话别名”对象,该对象具有一个唯一键,该键指向当前正在运行的会话(其中有人表面上已登录)
- 该会话别名模型被保存,该密钥被放入一个 cookie 中,该 cookie 的密钥是另一个随机字符串,称为 randomcookie
- 该 randomcookie 键名作为上下文变量传递并作为 flashvar 写入 html 到 swf
- swf 也只能通过 https 加载
- flash 应用程序使用
ExternalInterface调用 java 来获取该 randomcookie 位置的值,并删除该 cookie - 然后它创建一个
NetConnection到一个安全的服务器 https 位置,将该 randomcookie 作为参数(数据,不在 url 中)传递给 login-using-cookie rpc - 在网关端,pyamf 查找会话别名并获取它指向的会话,并据此登录用户(并删除别名,因此不能重复使用)
- (网关请求还可以将会话 cookie 和 session.session_key 设置为已知的会话 ID,但我可以让它创建一个全新的会话密钥……我假设这样做应该会正确影响响应以便它包含正确的会话密钥)
- 此时,flash 端返回的 cookie 值应该坚持
NetConnection,以便进一步的调用被验证(如果连接使用用户名和密码以正常方式进行验证,这肯定有效,所以我认为这个是一个安全的赌注,测试很快就会证明或反驳这一点)
那么,这是不安全的,还是可以正常工作?据我所知,由于 html 页面保证通过 ssl,密钥和 cookie 数据应该被加密并且不可窃取。然后,其中的信息应该可以安全地一次性用作临时密码,通过 ssl 再次发送,因为网关也是 https。之后,它通过 https 使用普通的 pyAMF 系统,并且没有做任何不寻常的事情。
【问题讨论】:
标签: django apache-flex session cookies pyamf