如何将“敏感”数据存储在MySQL数据库中?
1)我是否应该更多地关注MySQL数据库的安全性并将数据存储为纯文本?
2)我应该加密数据吗?
就我而言,“敏感”数据是个人付款。
由于
答案 0 :(得分:3)
如果攻击者可以访问纯文本数据,那么最糟糕的情况是什么?鉴于您必须解密数据以使其有用,因此您需要加密密钥在某处也可访问,任何可以访问数据库的攻击者也可能能够获取密钥,除非这是存档而不是例如一个真实的网站。我会专注于数据库服务器的安全性,除非您将硬盘驱动器装满可能丢失的数据,但这实际上取决于您需要加密它的原因。
答案 1 :(得分:3)
这是两者的混合物。两个现有的答案(在我写这个https://stackoverflow.com/a/10718397/1015483和https://stackoverflow.com/a/10718459/1015483时)是有效的 - 你需要看看我能想到的大约5种可能的攻击方法
但未提及三个要素:
对于问题的第2部分:
使用MySQL加密/解密函数将阻止有权访问原始数据的人,但不会阻止MITM或SQL注入,甚至是用于传输的CSV转储。
所以,IMO(这只是我的意见和我的方式)是用PHP加密并通过线路加密数据,因为这会停止所有捕获数据的方法,并且CSV转储将被“吵架”。
如果你这样做,你也可以使用varbinary / blob类型,因为它会阻止你不小心尝试在phpMyAdmin中读取/编辑。另外可能会名义上节省几个字节(虽然这取决于索引和其他东西 - 所以单凭这不是一个成功的论点)。
现在是不利的一面:搜索和排序。您索引或搜索的任何内容(如果已加密)将仅匹配填充到正确长度的整个完全区分大小写的字符串(通常搜索将不区分大小写,您可以使用LIKE进行部分搜索)。如果你想ORDER BY那么你需要原始的字符串。所以在设计结构时要记住这一点。
希望有所帮助。
答案 2 :(得分:1)
如果您需要保护可能被黑客入侵的数据库中的数据,您可以加密它 mcrypt
$key = "mykey";
$crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256,$key,$data,MCRYPT_MODE_ECB,$key);
之后,您可以根据〜预期的数据大小选择BLOB,TEXT,MEDIUMTEXT或其他任何内容。 *对于 VARBINARY / BINARY ,您可能需要首先pack。
答案 3 :(得分:1)
加密操作会产生额外费用。
如果在您的方案中,如果您的数据增长到相当大的规模,则需要评估此额外费用是否会出现问题。
避免数据泄漏的第一个前沿是强大的数据访问策略,其中包含访问配置文件等。这样做的缺点是你需要管理mysql并配置它。
如果您想关注配置文件的管理,您可以加密数据,假设CPU的额外成本和(取决于加密算法)额外的存储空间。
系统的安全性等于更弱的组件的安全性,不要只把你的精力集中在加密任务上,这只会给你安全感,如果数据可以被解密,唯一的就是入侵者需要的是时间和暴力破解加密