gpt4 book ai didi

mysql - 在数据库中存储加密数据的最佳做法是什么?

转载 作者:行者123 更新时间:2023-12-01 00:37:04 25 4
gpt4 key购买 nike

我正在构建一个网站,用户将在其中存储敏感数据。有权访问数据库的人应该无法查看此数据,但我不能使用哈希函数,因为用户需要查看他们存储的数据。我该怎么办?

最佳答案

TL;DR:加密数据库的列不会有太大帮助。

最佳做法:在花费时间和金钱保护系统之前找出威胁模型。如果您在对威胁模型没有清晰认识的情况下构建复杂的安全措施,您就会自欺欺人地产生一种错误的安全感。

而且,对 DBMS 中的列进行加密是一项复杂的安全措施。

您的威胁模型是什么?你会受到什么攻击?通过谁?攻击将如何伤害您?

最有可能的外部攻击来自网络犯罪分子闯入您的网络服务器以窃取您的用户信息以实现身份盗用 (Equifax)、勒索 (Ashley Madison) 或 spy 事件(美国政府人力资源数据库)。

如果您对 DBMS 中的某些列进行加密,并且您的 Web 用户需要能够查看和更新​​这些列,则您的 Web 服务器将必须知道加密和解密 key 。如果犯罪分子盗用了您的 Web 服务器,他将获得您的 key 。因此,他将有权访问您的 dbms 的加密列。而且,他会有一个大路标,上面写着看!这是 secret !

当然,还有很多其他可以想象到的外来者攻击。有人可能会突破您的防火墙并直接攻击您的数据库。有人可以进入缓存并获取缓存的敏感数据。有人可能会猜出您的 Web 应用程序的管理员密码。或者,窃取批量上传文件。

您提议的设计设想了一次内部攻击。必须防止已经拥有 DBMS 访问凭据的人看到某些表中的某些列。他们将如何处理这些信息?你没说。有什么威胁?

除了加密之外,您还可以采取这些措施来防止内部人员侵犯用户的 secret 性。

  1. 将敏感数据完全从您的系统中取出。例如,如果您处理信用卡,请使用 stripe.com 或 braintree.com。他们会为你保守 secret ,而且他们拥有优秀的网络安全团队。
  2. 确定您是否可以信任内部人员。调查 future 的员工等。
  3. 制定明确的安全政策。例如,“除非有特殊需要,否则我们从不查看 credit_card 表。”如果您在美国处理医疗保健数据,那么您已经有了 HIPAA 指南。让您的内部人员理解并同意您的指导方针。
  4. 解雇故意违反这些政策的内部人员。
  5. 建立有助于执行政策的机制。向每个内部人员发出他或她自己的用户名/密码对以访问 DBMS。在表和列级别使用选择性 GRANT 操作来允许和禁止查看数据。例如,

     GRANT SELECT (name, address) ON person TO username@'%';

username 查看 nameaddress 列,但看不到 中的 taxpayer_id 列人表。读这个。 https://dev.mysql.com/doc/refman/5.7/en/grant.html#grant-column-privileges

将您的时间和金钱花在保护您的 DBMS 机器的优质防火墙上。研究OWASP并遵循这些做法。花时间和金钱对您的 Web 应用程序进行渗透测试并解决问题。将它们用于审查和培训内部人员。这些东西比想象中的加密列魔法子弹更有效地减慢攻击者的速度。

关于两个家伙和熊的老笑话。

Bear: Roar.

Adam: Uh oh, I don't know if we can run faster than this bear.

Bill: I just have to run faster than you.

这是处理小型网站安全性的好方法。让它足够难以破解,坏人会攻击其他人。

如果您正在运行一个包含大量敏感记录的大型网站(我正在看着您,Equifax),这还不够好。

关于mysql - 在数据库中存储加密数据的最佳做法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46388762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com