5

“敏感”数据应如何存储在 MySQL 数据库中?

1)我应该更多地关注MySQL数据库的安全性并将数据存储为纯文本吗?

2)我应该加密数据吗?

  • 如果是,那么应该如何进行加密?
    1. 使用 MySQL aes_encrypt/aes_decrypt?
    2. 使用 PHP AES 函数/算法加密/解密数据?
  • 数据应该如何存储在 MySQL 中?
    1. 斑点
    2. 二进制
    3. 变量

就我而言,“敏感”数据是个人支付的。

谢谢

4

4 回答 4

4

这是两者的混合。两个现有的答案(在我写这个https://stackoverflow.com/a/10718397/1015483https://stackoverflow.com/a/10718459/1015483的时候)是有效的 - 你需要看看大约 5 种方法我能想到的可能攻击

  • 他们可以访问您的数据库服务器;所以是的,尽可能多地保护婴儿(马特的回答)
  • 独立的数据劫持(有人以其他方式获取您的数据库数据,可能是备份,可能是他们猜测密码,如果您将数据从一个地方传输到另一个地方,可能是 MITM)。为此,您确实加密了您的数据。您也可以出于某种原因进行 CSV 转储并通过电子邮件发送给某人。哎呀。但它发生了。所以加密(vlzvt的回答)

但是没有提到三个要素:

  • 他们可以访问您的 Web 服务器(如果与您的数据库服务器不同)。如果他们可以访问网络服务器,那么所有的赌注都会被取消,因为他们有你的密码,加密密钥很多。所以你需要让它比数据库服务器更安全。(马特可能是上面的意思 - 但请说清楚)
  • 与上面类似,但不要忘记,如果有人可以访问 phpMyAdmin 或您的管理控制台。不要使用纯文本身份验证或配置存储的密​​码进行访问。
  • 最后是您的应用程序本身(也是最难锁定的)。您需要防止可能泄露数据的 SQL 注入。如果有人确实通过未捕获的查询获得访问权限,加密数据将停止最小化问题 - 因此,加密是解决方案。

对于您问题的第 2 部分:

使用 MySQL 加密/解密函数将阻止有权访问原始数据的人,但不会阻止 MITM 或 SQL 注入,甚至用于传输的 CSV 转储。

因此,IMO(这只是我的意见和我的做法)是用 PHP 加密并通过网络发送加密数据,因为这会阻止所有捕获数据的方法,并且 CSV 转储将被“加扰” ”。

如果你这样做,你也可以使用 varbinary / blob 类型,因为它会阻止你不小心尝试在 phpMyAdmin 中读取/编辑。另外,名义上可能会节省一些字节(尽管这取决于索引和其他东西——因此仅凭这一点并不是一个成功的论点)。


现在是不利的一面:搜索和排序。您索引或搜索的任何内容,如果加密,将仅匹配填充到正确长度的整个、精确、区分大小写的字符串(通常搜索将不区分大小写,您可以使用 LIKE 进行部分搜索)。如果你想 ORDER BY 那么你需要原始字符串。所以在设计结构时要记住。

希望有帮助。

于 2012-05-23T11:33:27.207 回答
3

如果攻击者可以访问纯文本数据,最糟糕的情况是什么?鉴于您必须解密数据以使其有用,因此您也需要加密密钥可访问的地方,任何可以访问数据库的攻击者也可能能够访问密钥,除非这是为了存档而不是例如实时网站。我会专注于数据库服务器的安全性,除非您将 HDD 装满可能会丢失的数据,但这实际上取决于您为什么需要对其进行加密。

于 2012-05-23T10:46:49.403 回答
1

如果您需要保护可能被黑客入侵的数据库中的数据,您可以使用mcrypt对其进行加密

$key = "mykey";
$crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256,$key,$data,MCRYPT_MODE_ECB,$key);

之后,您可以根据 ~ 预期的数据大小选择 BLOB、TEXT、MEDIUMTEXT 或任何内容。* 对于VARBINARY/BINARY,您可能需要先打包它。

于 2012-05-23T10:51:26.870 回答
1

加密操作有额外的成本。

您需要评估在您的场景中,如果您的数据增长到相当大的规模,这种额外成本是否会成为问题。

避免数据泄漏的第一个前沿是具有访问权限等配置文件的强大数据访问策略。这样做的缺点是您需要管理 mysql 并对其进行配置。

If you want care about the managment of profiles, you can encrypt the data assuming the extra cost in CPU and (depend of encyption algorithm) a extra storage space.

The security of the a system is equals to the security of more weak component, don't focus your effort only in encryptation task, this only give you the sensation of security, if the data can be decrypted, the only thing that the intruder needs is time and bruteforce to break the encryption

于 2012-05-23T11:43:17.767 回答