我正在制作一个应用程序,其中存储了一些 PII(个人身份信息),例如出生日期以及姓名和一些其他字段。我想在MySQL上使用CBC使用AES_ENCRYPT加密数据,但是有一个管理员需要查看这些信息,但是如果我加密用户的信息,管理员将无法看到。我应该使用用户名加密 PII 并且让管理员无法查看用户名并使用用户名加密用户名,还是应该不加密用户名但使用用户名加密其他所有内容,从而留下一些安全风险,但允许管理员查看信息。我该怎么办?
最佳答案
一般来说,使用 AES 等对称加密对 DBMS 中的静态数据进行加密既没有必要,也不足以保护其免受攻击。
为什么?
一方面,像这样的系统中的薄弱环节通常是 Web 服务器,而不是 MySQL 服务器计算机。但 Web 服务器必须包含加密和解密数据所需的 key 。如果攻击者窃取了您的网络服务器,他就会拥有您的 key 和生成 key 的算法,因此他会窃取您的敏感数据。他还有一种非常强大的方法来找出您认为敏感的数据。
攻击者直接破坏您的 MySQL 服务器的可能性要小得多;在涉及 PII 的情况下,这些机器通常位于防火墙后面。
另一件事:您的管理员。他需要拥有 key ,而管理员是攻击者的重要目标。 (我并不是说他是黑帽子,只是说他的白帽子上有一个大红色目标。)
另一件事:它可能会给你一种错误的安全感。
(请注意,密码未加密:它们经过哈希处理。将密码与哈希密码进行比较并说“匹配”或“不匹配”很简单。但是采用哈希密码并恢复原始密码要困难得多.因此密码“加密”的论点与这种情况无关。)
我认真建议您花时间和金钱不要按照您的建议对您的 PII 进行静态加密。相反,请花费您的资源来确保您的网站安全,并确保您的 MySQL 服务器安全地位于强大的防火墙后面并且对公共(public)互联网不可见。
看看OWASP Top Ten漏洞。花时间在您的网站上与他们打交道。使用 burp scan 或 zap scan 等渗透测试工具尝试闯入。
保护您的网站就像关于两个人和熊的老笑话。
熊:咆哮。
乔:我希望我能跑赢熊。
迈克:我必须跑得比你快。
在网络安全领域,你不想成为 Joe。
关于mysql - 如果有敏感信息,我应该在 MySQL 上加密什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45514069/