过去几天我一直在阅读有关密码安全性的大量内容。这些帖子通常都有很长的评论帖,这使得很难确定一个明确的答案。
一般来说,似乎建议练习
将数据库连接密码存储在文档根目录上方的单独配置文件中。此文件不受版本控制,并受文件系统权限的保护。
使用经验证的安全散列算法散列用户密码,并使用每个密码唯一的盐。
我不想重新发布(双关语)与之前已被提及和回答的相同问题。所以我不想深入了解如何来保护密码。
我想要了解的是,如果以纯文本形式存储数据库连接密码是可接受的,那么如何使用户密码安全存在这么多的讨论(和不同意见)。
为什么存储在数据库中的密码比保存连接密码的配置文件更容易受到攻击?攻击者是否需要访问我的系统才能从我的数据库中获取用户密码?
就我而言,我在CentOS上使用PHP / MySQL,但这个问题也适用于其他环境。
答案 0 :(得分:1)
我想要了解的是,如果以纯文本形式存储数据库连接密码是可接受的,那么如何使用户密码安全存在这么多的讨论(和不同意见)。
由于三个原因,存在很多不同意见。首先,讨论通常缺乏威胁模型。其次,对于威胁是什么,意见不同。第三,关于如何处理特定威胁的意见不同。由于威胁没有明确定义,人们会忽略一些威胁并将他们的意见抛在别人身上。
OWASP的John Stevens汇总了一份关于服务器密码安全性和存储的好文档。它遍历攻击和威胁,然后添加中断威胁的步骤。以下是对OWASP材料的引用:所以我不想详细说明如何保护密码。
好吧,在你有威胁模型之后,魔鬼就会出现在细节中。
为什么存储在数据库中的密码比拥有连接密码的配置文件更容易受到攻击?
这取决于很多事情。例如,如果管理员有权访问配置文件然后离开公司,该怎么办?或者如果您在异地发送数据库备份怎么办?威胁模型中存在这些威胁吗?
攻击者是否需要访问我的系统才能从我的数据库中获取用户密码?
您需要一个定义明确的威胁模型。
再次,退出公司的管理员怎么样?他可以访问所有密码。
或者异地备份怎么样?快递员和现场工作人员可以访问密码。
或者FISA信件如何翻转所有用户名和密码。 Lavabit关闭是因为政府要求一切,并且不他们感兴趣的一个用户的密码和密钥(Edward Snowden)。
这些威胁都不涉及远程攻击者试图侵入您的系统。
攻击者是否需要访问我的系统才能从我的数据库中获取用户密码?
一切都是平等的,不。坏人会试图欺骗你的用户,因为这是最简单的。
有关密码(不仅仅是存储)的更多信息,请参阅Peter Gutmann的Engineering Security。你知道使用密码复杂性政策是个坏主意吗?在N天之后将密码过期是一个坏主意吗? Guttman的书告诉你为什么并引用相关的安全性研究。
答案 1 :(得分:0)
考虑攻击者通常需要哪些漏洞来检索其中一个密码:
用户密码存储在数据库中,通常会被SQL注入泄露。根据密码的存储方式,攻击者可能需要一些额外的步骤来检索密码。
数据库密码通常存储在文件中,因此需要执行文件读取/包含或代码/命令执行才能读取文件。
但访问数据库通常仅限于某些网络或机器,即例如,Web服务器。因此,攻击者至少需要在Web服务器上执行代码/命令才能访问数据库。如果攻击者能够在Web服务器上执行任意代码/命令,则Web服务器已经完全受到攻击。
答案 2 :(得分:0)
有几个原因,为什么要保护用户密码而不是数据库连接密码: