表单数据的客户端/服务器端加密的最佳实践

时间:2011-10-25 21:20:59

标签: php encryption amazon-s3 amazon-web-services security

我正在计划一个项目,该项目需要将敏感数据从客户端传输到服务器端,然后传输到AWS Simple Storage存储桶。

这是我的计划:

  1. 使用SSL / HTTP(S),可以通过Web表单安全地发布数据,然后由我的Web服务器上的PHP脚本检索。

  2. 一旦服务器收到数据,PHP脚本将立即使用AWS SDK for PHP将其发送给AWS,并附带使用AES-256加密服务器端数据的指令 - 请参阅{{ 3}}

  3. 问题是在步骤1和步骤2之间,数据不会被加密,因为它必须先打到我的网络服务器进行处理。我想让脚本在将数据发送到AWS之前将数据写入服务器上的文本文件,然后在发送后立即从服务器中删除临时文件。这样做有风险吗?有没有办法将文件流而不是实际文件发送到AWS Simple Storage存储桶,从而避免了将临时文件写入服务器的需要?

    我是否忽略了更好的方法来实现我100%加密的数据传输的原始目标?

2 个答案:

答案 0 :(得分:2)

如果您正在向磁盘提交某些内容,那么一个充满动力的攻击者可以安排在该文件到达驱动器盘片时窃取该文件 - 在大多数现代操作系统上获取磁盘/目录的任何更改都是相当简单的,因此他们可以简单地监控您的临时目录(无论您在何处编写这些文件)并将其复制出来。

即使您立即删除该文件,该文件仍然存在于各种缓存中的存储系统中,并且可以在磁盘盘片上“随时写入”扇区。在数据被其他内容覆盖之前,即使在删除后,更加专注的攻击者仍然可以检索该文件。

除此之外,拥有足够访问权限的人可以直接访问PHP进程的内存空间并从那里提取文件。

所以......你必须问自己的问题是“我的威胁模型是什么”?并且“我在这个文件中存储了哪些数据?”

如果数据包含信用卡号,那么您已经违反了PCI标准 - CC号可以从不以明文/可读格式存储在任何地方。

答案 1 :(得分:0)

不是加密专家,所以无法帮助,但是......

如果您不相信Web服务器的物理安全性足以依赖标准的Unix系统强化,您可能需要获得更好的Web服务器。

您在中间服务器上使用的任何加密都会受到以下事实的影响:解密密钥必须存储在服务器上,以便数据被解密然后发送到AWS。如果密钥是可硬的,即使加密,数据也不安全。如果它不可硬,那么数据如何可以销售?

强制系统只使用不可能写入磁盘的RAM是很棘手的,并且忽略了这样一个事实:具有root访问权限的人也可以在加密之前直接从Web服务器进程的RAM中读取数据(很困难)。 / p>

一旦有人拥有root权限,除非密钥存储在其他地方,否则没有真正的防御,因此我建议在浏览器中使用公钥并在AWS中使用私钥。忘记解密它的一半。如果AWS无法做到这一点,请不要使用它。 This post建议他们使用教程here,但你需要根据它的外观使用Java。