43

我一直认为将密码以纯文本形式存储在数据库中是(正如这里的其他人所说)是一件非常糟糕的事情™。

从历史上看,我们的大部分服务器端编码需求都外包给了一组程序员。他们将密码以纯文本形式存储在 MySQL 数据库中。

作为常驻代码猴子(顺便说一句,这是第一个在这里工作的精通服务器端的猴子,所以我在继承地球,可以这么说)我有一种胃里的感觉,那就是我的流浪汉将上线当这种纯文本废话被利用时。

我试图向我的老板解释纯文本密码是多么糟糕,但我突然明白了:我想我从来没有真正知道为什么它们如此糟糕。除了给你的黑客一张白银盘上的密码列表之外,还有更多的事情吗?这对我来说听起来已经够糟糕的了,但是在 la-la 的土地上,我们的网站是“安全的”并且不受任何黑客的攻击,这个论点似乎并没有削减它。我怎样才能说服(或吓唬)我的老板要求在他珍贵的网站上进行散列?

相关:在数据库中加密/散列纯文本密码

4

9 回答 9

69

在军队中,它被称为“纵深防御”。理论是你可以硬化每一层,而不是只硬化一层并希望它就足够了。

我听说过像您这样的数据库,称为“外面坚硬,里面柔软而耐嚼”。专门的黑客可以通过一百万种方式访问​​您的数据库。社会工程、心怀不满的员工、决定查看他的登录是否仍然有效的前雇员,或者他编写的后门是否仍然存在,一个错过的操作系统补丁......名单还在继续。

如果一个不良行为者通过这些方法中的任何一种获得访问权限,而不仅仅是获取数据,他可以访问您系统中每个用户的每个用户名/密码组合,并且正如有人指出的那样,人们通常对每个网站使用相同的组合. 因此,您的黑客出去并拥有数百人的 Paypal、电子邮件和银行帐户。

我画了一幅足够可怕的图画了吗?

于 2009-07-29T00:39:08.130 回答
33

告诉他考虑到,在许多公司中,安全问题来自内部而不是外部。

现在问他,下次他因某种原因不得不解雇某人时,他将如何向他的客户解释黑客是如何窃取他们的密码(毫无疑问他们在其他地方使用的)的。

还问他他认为他的客户有多想知道他们的密码对任何对数据库具有读取权限的人都是可见的。

于 2009-07-29T00:10:34.883 回答
14

这里有几个原因:

  • 有人可能会闯入您的网站。这可能不太可能,而且这可能不会影响你的老板(我现在可以听到对话:“你是说该网站不安全吗?”)但它发生了,请记住,没有人认为他们的网站老实说会被闯入...
  • 内部人员(如您自己)随意查看数据库:您可能不会尝试查看任何人的密码,但在正常工作过程中,您可能需要查看包含密码的表。考虑到许多人对所有事情(可能包括您的老板!)都使用相同的密码,您不希望所有这些密码都暴露出来。询问您的老板是否曾在两个不同的网站上重复使用过密码
  • 如果有人发现您的应用程序没有加密密码,他们可能会严重质疑您的应用程序的信任度
  • 将密码(最好使用盐)散列到数据库中基本上没有任何成本,为什么不呢?
于 2009-07-29T00:12:34.050 回答
9

您可能希望指出,如果信息被泄露,未能正确保护帐户可能会使公司承担法律责任。如果用户的数据由于贵公司的行为(或不作为,视情况而定)而暴露,则忽略已知漏洞可能会导致您支付法律费用。

在美国,公司有法律义务保护某些类型的数据,例如财务和医疗信息。不这样做可能会产生严重的后果。我不熟悉这方面的其他国家/地区的法律,但是如果贵公司正在处理此类数据,则值得研究一下。

于 2009-07-29T01:03:13.520 回答
7

除了安全风险之外,我想知道如果您的客户发现您公司的每个员工都可以访问密码,他们会怎么说。当涉及可能的泄漏时,如果出现以下情况,密码将面临风险:

  • 数据库由外部公司备份
  • 运行 db 软件的操作系统存在任何安全风险
  • 任何其他硬件或软件防火墙中的安全漏洞
  • 任何有权访问数据库的用户都会以某种方式感染可以利用数据的病毒
  • 数据库恰好在被盗的计算机或笔记本电脑上
  • 一名心怀不满的员工被解雇并决定“回来”

每隔一段时间,您就会听到一些以纯文本形式存储敏感信息的企业,而且这种情况永远不会结束。我们都是人,容易出错,在安全方面你不能假设完美。你不会发现任何一家盈利的大公司都会为任何可以避免的风险留出空间,因为任何可能发生的坏事都会发生……

于 2009-07-29T00:35:01.547 回答
5

如果“给你的破解者一张银盘上的密码列表”不是一个足够好的理由,那么什么才是一个足够好的理由呢?

于 2009-07-29T00:11:10.793 回答
4

纯文本密码被盗的数据库太多了:如果它可能发生在 reddit上,它也可能发生在你身上。

于 2009-07-29T00:12:32.943 回答
3

如果您的组织保持 PCI-DSS 合规性(例如接受信用卡的商家),则不允许使用纯文本密码。请参阅 PCI DSS 项目 8.4。

如果您的组织是受 FDIC 保险的金融机构,则不允许使用明文密码(请参阅 FDIC FIL 69 2001)。

如果您希望获得 ISO/IEC 27001 认证,例如,如果您与某些政府机构合作,则应在传输和静态时对密码进行加密。

于 2015-03-03T18:14:44.337 回答
1

我看到针对这个问题发布的两个很好的答案是:

  1. 您保护密码不被窥探员工,即具有合法访问数据库权限的人如果愿意,就不能轻易窃取密码,

  2. 应用程序逻辑缺陷,例如网站前端的 SQL 注入漏洞,将减少导致妥协的机会。

在我看来,加密数据库密码是个好主意(尽管我还没有为我的大多数应用程序这样做),但更重要的是确保你的数据库服务器尽可能地防弹。网络和授权访问。如果攻击者可以访问您的数据库,那么无论您如何存储密码,他们都可以破解它们。

于 2009-07-29T00:13:14.333 回答