【问题标题】:Is there a secure way to send variables from php to flash有没有一种安全的方式将变量从 php 发送到 flash
【发布时间】:2012-06-03 02:19:37
【问题描述】:

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

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

我想做的是在 Flash 中创建一个在线测验。测验将嵌入网页中。它需要从会话变量中获取用户名并将其传递给 flash,以便了解哪个帐户正在使用测验。是否可以安全地将用户名传递给 flash 程序?如果是这样,我应该在哪里查找更多信息?

谢谢

【问题讨论】:

  • Flash 并不安全,实际上任何基于浏览器的东西都可能被黑客入侵,更不用说使用wireshark 来捕获Flash 和服务器之间的通信了。此外,任何 HTTP 请求都可以伪造。

标签: php flash security


【解决方案1】:

Flash 支持称为 Action Message Format (AMF) 的东西,这是一种协议,Flash 应用程序可以使用它来调用服务器上的方法并接收响应。

AMF 是一种二进制协议,具有多种语言的服务器端支持,包括 PHP(和许多 PHP 框架)。我怀疑如果您的 Flash 应用程序可以发出 HTTPS 请求,它应该能够通过 HTTPS 发出 AMF 请求。

但是……“安全”?

如果可以在线上嗅探 AMF 数据,则可以对其进行反序列化,就像明文一样。 Flash 插件是一个封闭源代码的应用程序,因此您无法查看源代码然后自己编译它以确保它没有做任何未经您授权的事情。

如何定义“安全”?您希望防范的具体攻击或信息泄露类型是什么?

对于您的应用程序,也许一种策略是让浏览器验证用户身份并建立 PHP 会话。然后在加载时将会话 cookie 值作为变量传递给 Flash 应用程序。然后,您的 Flash 应用程序可以制作自己的包含 cookie 标头的 HTTP/HTTPS 请求,从而将请求标识为已建立会话的一部分。

在我看来应该有更简单的方法来处理这个问题,但我对 Flash 的了解也有限。

我赞同您应该考虑不使用 Flash 进行这项工作的评论。

【讨论】:

    【解决方案2】:

    除非没有引起注意:您要防止什么样的攻击,您准备为此付出多少?

    倒序;为了让您的服务器通过 HTTPS 服务页面,您需要从某个授权机构购买证书。这不是免费服务 + 它已过期。使用加密连接服务页面会按时间和内存对您的服务器征税,它需要对数据 + 流量进行编码(几乎是基本大小的两倍)。它还使嵌入其他人的内容(例如广告、来自其他网站的图像)难以投放,因为并非所有广告提供商都会通过安全和不安全的连接提供广告。如果您计划让您的网站从展示广告中获利,这可能是一个潜在的亮点。

    攻击的种类:你在保护谁?您是否担心 Flash 会以某种方式帮助将您的应用程序逻辑暴露给潜在的攻击者,以便她能够利用您的系统弱点?例如,如果您使用 Flash 将内容上传到您的服务器,或者在某些情况下允许使用它加载服务器的代码,这可能是可能的。

    或者您是否试图保护用户免受其他用户的侵害,因为如果一个用户可以窃听另一个用户发送的内容,这可能会使她受益?

    以上两者也有度数和组合。

    为什么需要将用户名传回给他们?我想他们一定已经知道了。或者你是不是偶然的意思是 Flash 应该发送用户名?在这种情况下,再次,危险到底是什么?是其他用户知道发送了什么名称,还是用户自己能够发送“错误”名称? “错误”是指几件事:错误 - 可能是另一个用户的名称,或者是“正确”用户的名称,但发送的方式会启动另一个会话,而不是在已经存在的会话内部(从另一个选项卡/浏览器登录)。

    一些附加信息:虽然您确实需要为证书付费,但与依赖裸浏览器的功能相比,使用 Flash 有一个优势。如果您对安全性的主要关注不是通过让您的整个站点通过 HTTPS 服务来给潜在客户留下深刻印象,那么您可以习惯性地在 Flash 中实现 HTTPS,但是,这需要大量的工作和对此事的理解。 SSL(用于通过 HTTPS 提供页面的加密)依赖于使用 2 部分密钥的双向编码原理,例如 RSA。这个想法是,给定一个公钥,它只能加密数据,但你需要私钥来解密它。因此,向您的用户发送公钥是安全的,他们以后可以使用它来加密他们发送的数据。在这种情况下,其他任何人几乎不可能窃听您的服务器和用户之间从用户到服务器的方向发送的数据,即使他们可能拥有公钥,他们也无法解密数据。但这不会阻止他们可能知道服务器发送给客户端的信息 - 您应该将其视为可能始终已知且无法隐藏。

    【讨论】:

    • 我不太担心有人在测验中作弊,而是或多或少地担心在 Flash 中实施此测验是否会使某人更有可能更改存储在我的数据库中的结果。
    • Dane,我认为方向只是从 php 页面快速获取数据,然后从数据库中获取数据。用户不应与任何 php 或 mysql 页面交互,数据传输的唯一方向应该是那个(mysql -> php -> flash)。由于用户在任何时候都无法访问数据库(数据库对用户来说是不变的),因此非常安全。
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      方法可以将数据“从 PHP”发送到 Flash,但没有安全方法可以做到。

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

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

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

      【讨论】:

        猜你喜欢
        • 2021-11-20
        • 1970-01-01
        • 1970-01-01
        • 2011-09-23
        • 1970-01-01
        • 2023-03-24
        • 2015-11-05
        • 1970-01-01
        • 2012-03-15
        相关资源
        最近更新 更多