有没有一种安全的方法可以将变量从 php 发送到闪存


Is there a secure way to send variables from php to flash

我首先要说的是,我对flash和php都比较陌生。

目前我有一个带有用户登录名和密码(以 php 为单位)的站点设置。成功登录后--(php查询到mysql),用户登录,用户名和其他一些变量存储为会话变量。

我正在尝试做的是在 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 提供页面的加密)依赖于使用两部分密钥(例如 RSA)进行双向编码的原则。这个想法是,给定一个公钥,只能加密数据,但你需要私钥来解密它。因此,向用户发送公钥是安全的,他们以后可以使用公钥来加密他们发送的数据。在这种情况下,其他人几乎不可能窃听您的服务器和用户之间从用户到服务器的方向上发送的数据,即使他们可能拥有公钥,他们也无法解密数据。但这不会阻止他们可能知道服务器发送给客户端的信息 - 您应该将其视为可能总是已知的并且不可能隐藏。

使此类测验安全的唯一方法是:

  • Flash应用程序,在测验结束时,将所有答案(不是结果,只是答案)发送到PHP端(闪存可以执行XHR)
  • PHP方面的东西可以验证用户会话(如果他开始测验,如果他在测验上花费超过1秒..这样的细节)
  • PHP 脚本将响应发送回 Flash-thing,其中包含结果或错误代码

有一些方法可以将数据"从PHP"发送到Flash,但没有安全的方法可以做到这一点。

要将任何数据"发送"到Flash,您需要...

  • 将其打印在与 Flash 元素相同的页面上(或直接打印到显示它的元素中)。但是,人们可以编辑您打印给他们的任何信息,并使用它来操作发送到Flash的数据。

  • 让Flash发出HTTP(S)请求,并从那里获取数据。这也行不通,因为Flash文档可以被反编译,或者数据可以被拦截(甚至欺骗)。