2012-09-24 174 views
1

我想在mysql数据库中存储敏感用户数据,如姓名和地址。如何在mysql中使用php存储敏感用户数据

我的主要问题是如何搜索包含加密数据的数据库。

如果有人偷电脑,它不好,如果数据以纯文本格式存储,所以我想用一个存储在php文件中的密钥加密它。 这个php文件是用ioncube编码的,所以php代码里的一个键是(非常)安全的。

另一方面,我也希望能够从web-frontend查询用户名和地址的应用程序。

我的第一个想法是在数据存储之前和我的搜索页面中加密数据,我将不得不读取整个用户数据库并将其完全解密,以便可以使用php搜索结果。

但对于大型用户数据库,这将是非常强烈的记忆。


附加信息:

我已经加密的密码,所以我需要的是无解的。

我需要一个PHP和MySQL的解决方案,因为我无法更改服务器配置(光盘加密等)服务器是一个旧的Ubuntu 9安装,这是非常不安全的,但不能改变的原因,我不会在这里解释。

+0

您可以使用MD5或类似软件进行加密,并使用ID进行检索。 –

+0

我认为你的意思是_sensitive_用户数据:) – Deebster

+2

@VijaySarin,对于1 MD5不加密,2 MD5是可破解的。与时俱进。 – Petah

回答

2

您可以加密数据库行中的每个敏感字段,但需要保证密钥的安全。如果您担心整个服务器被盗,那么您无法将解密密钥存储在文件系统中,因为这些密钥会与机器一起被盗。

您可以使用用户密码生成的密钥对每个用户进行加密。由于您(我假设)仅存储密钥的散列(使用Bcrypt),攻击者很难检索用户的密码。 但是,这意味着只有用户可以查看他的数据;管理员帐户将无法解密其他用户的敏感数据。这对你来说可能是一种破坏行为。

如果数据需要被用户旁边的其他人访问,那么您必须在您的应用中全局使用相同的加密密钥。如果没有配置文件中的这个密钥,你唯一的选择就是尝试将密钥存储在内存中(这样你就不得不在系统可用之前初始化系统)。这不足以保证密钥没有写入磁盘(认为交换文件等),但会更接近于冷启动后保护数据。

+0

听起来不错。我的主要问题是如何搜索包含加密数据的数据库 – rubo77

+1

在哪个版本中?如果您正在使用全局密钥并搜索完全匹配,则可以加密搜索值并与密文匹配。否则,您需要解密您希望检查的每个字段。 – Deebster

+1

太棒了!谢谢,这就是我一直在寻找的解决方案(不明白为什么这样做会因为没有建设性而关闭) – rubo77

0

很简单,将您的服务器存储在锁和密钥(或生物识别安全)的后面。

并散列你的密码。选项2使用encrypted file system

+0

对不起,我的客户机上无法做到这一点。 (太多的问题,不同的安装) – rubo77

+0

@ rubo77那么它看起来像你卡在不安全的数据。 – Petah