我首先要说我对 flash 和 php 都比较陌生。
目前我有一个带有用户登录名和密码(在 php 中)的站点设置。成功登录后——(对 mysql 的 php 查询)用户登录,用户名和其他一些变量被存储为会话变量。
我想做的是在 Flash 中创建一个在线测验。测验将嵌入网页中。它需要从会话变量中获取用户名并将其传递给 flash,以便了解哪个帐户正在使用测验。是否可以安全地将用户名传递给 flash 程序?如果是这样,我应该在哪里寻找更多信息?
谢谢
Flash 包括对一种称为动作消息格式(AMF) 的支持,这是一种协议,Flash 应用程序可以使用它来调用服务器上的方法并接收响应。
AMF 是一种二进制协议,具有多种语言的服务器端支持,包括 PHP(和许多 PHP 框架)。我怀疑如果您的 Flash 应用程序可以发出 HTTPS 请求,它应该能够通过 HTTPS 发出 AMF 请求。
但是……“安全”?
如果可以在线上嗅探 AMF 数据,则可以对其进行反序列化,就像明文一样。Flash 插件是一个封闭源代码的应用程序,因此您无法查看源代码然后自己编译它以确保它没有做任何您未授权的事情。
你如何定义“安全”?您希望防止的攻击或信息泄漏究竟是什么?
对于您的应用程序,也许一种策略是让浏览器验证用户并建立 PHP 会话。然后在加载时将会话 cookie 值作为变量传递给 Flash 应用程序。然后,您的 Flash 应用程序可以制作自己的包含 cookie 标头的 HTTP/HTTPS 请求,从而将请求标识为已建立会话的一部分。
在我看来应该有一种更简单的方法来处理这个问题,但我对 Flash 的了解也有限。
我支持您应该考虑不使用 Flash 进行这项工作的评论。
除非它被忽视:你试图阻止什么样的攻击,你准备为它付出多少?
以相反的顺序;为了让您的服务器通过 HTTPS 服务页面,您需要从某个授权机构购买证书。这不是免费服务 + 它已过期。使用加密连接服务页面会按时间和内存对您的服务器征税,它需要对数据 + 流量进行编码(几乎是基本大小的两倍)。它还使嵌入其他人的内容(例如广告、来自其他网站的图像)难以投放,因为并非所有广告提供商都会通过安全和不安全的连接提供广告。如果您计划让您的网站从展示广告中获利,这可能是一个潜在的亮点。
攻击的种类:你在保护谁?您是否担心 Flash 会以某种方式帮助将您的应用程序逻辑暴露给潜在的攻击者,以便她能够利用您的系统弱点?例如,如果您使用 Flash 将内容上传到您的服务器,或者在某些情况下允许使用它加载服务器的代码,这可能是可能的。
或者您是否试图保护用户免受其他用户的侵害,因为如果一个用户可以窃听另一个用户发送的内容,这可能会使她受益?
也有以上两者的度数和组合。
为什么需要将用户名传回给他们?我想他们一定已经知道了。或者你是不是偶然的意思是 Flash 应该发送用户名?在这种情况下,再次,危险到底是什么?是其他用户知道发送了什么名称,还是用户自己能够发送“错误”名称?“错误”是指几件事:错误 - 可能是另一个用户的名称,或者是“正确”用户的名称,但发送的方式会启动另一个会话,而不是在已经存在的会话内部(从另一个选项卡/浏览器登录)。
一些附加信息:虽然您确实需要为证书付费,但使用 Flash 比依赖裸浏览器的功能更有优势。如果您对安全性的主要关注不是通过让您的整个站点通过 HTTPS 服务来给潜在客户留下深刻印象,那么您可以习惯性地在 Flash 中实现 HTTPS,但是,这需要大量的工作和对此事的理解。SSL(用于通过 HTTPS 提供页面的加密)依赖于使用 2 部分密钥的双向编码原理,例如 RSA。这个想法是,给定一个公钥,它只能加密数据,但你需要私钥来解密它。因此,向您的用户发送公钥是安全的,他们以后可以使用它来加密他们发送的数据。在这种情况下,其他任何人几乎不可能窃听您的服务器和用户之间从用户到服务器的方向发送的数据,即使他们可能拥有公钥,他们也无法解密数据。但这不会阻止他们可能知道服务器发送给客户端的信息 - 您应该将其视为可能始终已知且无法隐藏。
使此类测验变得安全的唯一方法是:
有一些方法可以将数据“从 PHP”发送到 Flash,但没有安全的方法可以做到这一点。
要将任何数据“发送”到 Flash,您需要...
将其打印在与 Flash 元素相同的页面上(或直接打印到显示它的元素中)。但是,人们可以编辑您打印给他们的任何信息,并使用它来处理发送到 Flash 的数据。
让 Flash 发出 HTTP(S) 请求,并从那里获取数据。这也不起作用,因为 Flash 文档可以被反编译,或者数据可以被截获(甚至被欺骗)。