2011-10-25 61 views
0

我正计划一个项目,要求将敏感数据从客户端传输到服务器端,然后传输到AWS Simple Storage存储桶。表单数据的客户端/服务器端加密的最佳实践

这是我的计划:

  1. 使用SSL/HTTP(S),该​​数据可以安全地通过网络的形式,其然后由PHP脚本我的网络服务器上检索到的发布。

  2. 一旦数据由服务器接收,PHP脚本会立即将其使用AWS SDK的PHP与指令对服务器端的数据与AES-256见AWS Encryption加密发送到AWS。

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

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

+0

如果您正在从实例写入S3,那意味着您可以在可用于访问S3的实例上拥有AWS凭证。尽管AWS可能会对S3中的内容进行加密,但任何破解实例的人仍然可以使用AWS密钥访问数据。您可以通过使用对S3存储桶具有只写权限的IAM凭证来降低风险。 –

+0

如果系统触发交换,则存储在内存中的东西也可以在您不知情的情况下写入磁盘 –

+0

什么样的客户端。最简单的答案是在那里加密。 – imichaelmiers

回答

2

如果你向磁盘提交了一些东西,那么一个足够积极的攻击者可以安排在该文件碰到驱动器盘片的时候窃取该文件 - 在任何现代化的磁盘/目录中发生任何更改的通知都相当简单操作系统,所以他们可以简单地监视你的临时目录(无论你在写这些文件的地方)并复制出来。

即使您立即删除该文件,该文件仍存在于各种缓存中的存储系统中,并作为“可随时写入磁盘”的扇区。在数据被别的东西覆盖之前,甚至更多的专用攻击者仍然可以在删除后检索文件。

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

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

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

+0

谢谢你的破败。信息本质上是个人信息(不是CC信息),所以不需要担心PCI。更多的是关于客户和顾问沟通的保密性。我不认为公司真的是黑客的目标,更不是非常专注的目标,但我只想尽可能地努力...... – user604138

0

不是一个加密专家,所以不免有,但是......

如果你不信任的网络服务器的物理安全性,足以依靠标准的Unix系统加固,您可能需要获得更好的网络服务器。

您在中间服务器上使用的任何加密都会因为必须将解密密钥存储在服务器上以便解密数据然后将其发送到AWS而受到影响。如果密钥是可扩展的,即使加密,数据也不安全。如果它不具备可扩展性,那么数据如何可以被扩展?

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

一旦有人拥有root权限,除非密钥存储在其他地方,否则没有真正的防御,所以我建议在浏览器中使用公钥和AWS中的私钥。忘记解密一半。如果AWS不能这样做,那就不要使用它。 This post建议他们使用教程here,但您需要使用Java的外观。

相关问题