如何使用php在mysql中存储敏感的userdata

时间:2012-09-24 11:11:25

标签: php mysql encryption

我想在mysql数据库中存储名称和地址等敏感用户数据。

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

如果有人窃取计算机并不好,如果数据以纯文本格式存储,那么我想用密钥对其进行加密,该密钥存储在php文件中。 php文件是用ioncube编码的,因此php代码中的一个键是非常安全的。

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

我的第一个想法是在存储数据之前加密数据,在我的搜索页面中,我必须读取整个用户数据库并完全解密,所以我可以用php搜索结果。

但对于大型用户数据库,这将非常耗费内存。


其他信息:

我已经加密了密码,所以我不需要解决方案。

我需要一个php和mysql的解决方案,因为我无法更改服务器配置(光盘加密等)服务器是一个旧的ubuntu 9安装,这是非常不安全,但由于我不解释的原因无法更改这里。

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

简单,将您的服务器存放在锁和钥匙(或生物识别安全)之后。

并哈希密码。

选项2使用encrypted file system