- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在过去的几天里,我一直在阅读大量有关密码安全的书籍。这些帖子通常有很长的评论线程,因此很难确定明确的答案。
一般来说,这似乎是推荐的做法
将数据库连接密码存储在文档根目录之上的单独配置文件中。此文件不受版本控制并受文件系统权限保护。
使用经过验证的安全哈希算法对用户密码进行哈希处理,每个密码的加盐值都是唯一的。
我不想重复(双关语)之前已经提出和回答过的相同问题。所以我不想详细说明如何保护密码。
我想了解的是,如果以纯文本形式存储数据库连接密码是可以接受的,为什么会有这么多关于如何确保用户密码安全的讨论(和分歧)。
为什么存储在数据库中的密码比保存连接密码的配置文件更容易受到攻击?攻击者不需要访问我的系统才能从我的数据库中获取用户密码吗?
就我而言,我在 CentOS 上使用 PHP/MySQL,但这个问题也适用于其他环境。
最佳答案
What I am trying to understand is why there is so much talk (and disagreement) about how to make the user passwords secure if it's acceptable to store the database connection password in plain text.
存在如此多的分歧有以下三个原因。首先,讨论通常缺乏威胁模型。其次,对于什么是威胁,意见不一。第三,对于如何应对特定威胁,意见不一。由于威胁没有明确定义,人们会忽略一些威胁并将他们的意见扔给其他人。
OWASP 的 John Stevens 整理了一份关于服务器密码安全和存储的好文档。它遍历了攻击和威胁,然后添加了消除威胁的步骤。以下是对 OWASP Material 的引用:
So I don't want to get into the specifics of how to secure the passwords.
嗯,有了威胁模型之后,问题就出在细节上。
Why are the passwords stored in the database more vulnerable than the config file that holds the connection password?
这取决于很多事情。例如,如果管理员有权访问配置文件然后离开公司怎么办。或者,如果您将数据库备份发送到异地怎么办?这些威胁在您的威胁模型中吗?
Doesn't an attacker need to get access to my system in order to get the user passwords from my database?
您需要一个定义明确的威胁模型。
同样,离开公司的管理员呢?他可以访问所有密码。
或者异地备份怎么样? express 员和现场工作人员可以访问密码。
或者通过 FISA 信函交出所有用户名和密码怎么样。 Lavabit 关闭是因为政府要求一切,不他们感兴趣的一个用户(爱德华·斯诺登)的密码和 key 。
这些威胁都不涉及远程攻击者试图侵入您的系统。
Doesn't an attacker need to get access to my system in order to get the user passwords from my database?
在所有条件都相同的情况下,不。坏人会尝试对您的用户进行网络钓鱼,因为这是最简单的。
有关密码的更多阅读(不仅仅是存储),请参阅 Peter Gutmann 的 Engineering Security .您知道使用密码复杂性策略是个坏主意吗?在 N 天后使密码过期是个坏主意吗? Guttman 的书告诉您原因并引用了相关的安全研究。
关于database - 密码安全 : database connection password vs storing user passwords,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22571908/
export class UserListComponent implements OnInit{ users; constructor(private userService: UserS
我最近在我的系统中遇到了 Java 语言环境的问题,我试图用这个配置运行一个项目: -Duser.language=pt_BR -Duser.country=BR 谷歌搜索后,我找到了this sit
1 当我希望出现注册错误时,我的代码出现问题:管理器不可用; 'auth.User' 已替换为 'users.User' ,我尝试解决其他问题,与 Manager 不可用相同; 'auth.User'
Loopback 非常酷,但这是我迄今为止遇到的一个缺点,我真的不确定如何解决它。内置用户模型在我的 MongoDB 数据库中生成一个名为“User”的集合,当我尝试根据 Loopback.js 自己
我在 aws cognito 中有以下用户组。行政成员付费成员(member) 我想在所有用户注册我的应用程序时将所有用户默认分配到 Member 用户组,这样我就可以为该用户组分配不同的 IAM A
blogsIndex.blade.php @extends('layouts.default') @section('details')
我正在尝试在Rails 3开发环境中使用sqlite3而不是MySQL,但是遇到了问题。尝试执行rake db:migrate时,我得到: SQLite3::SQLException: no such
尝试使用 构建 API Phoenix v1.3 按照本教程: https://dreamconception.com/tech/phoenix-full-fledged-api-in-five-mi
我正在使用通过模板 cookie-cutter 创建的 Django。当我尝试在本地使用 docker 运行项目时,出现以下错误。 FATAL: password authentication fai
我正在尝试使用 node.js/adonis 创建新用户 我创建了这两个函数: const User = use("App/Models/User") async store ({ request,
我想安排一些事情,例如 GET 请求 http://example.com/user/foo@bar.com 内部调用脚本 /var/www/example.com/rest/user/GET.php
我是一名具有可用性工程背景的软件开发人员。当我在研究生院学习可用性工程时,其中一位教授有一句口头禅:“你不是用户”。我们的想法是,我们需要将 UI 设计基于实际的用户研究,而不是我们自己关于 UI 应
您好,我正在制作一个使用互联网发送消息的消息传递应用程序。我需要从用户 a 向用户 b 发出通知。 我使用这段代码: if (toUser!= nil){ parseMessage[@
在 ruby/ror 中你可以这样做: user = User.new(params[:user]) 它使用发布表单中的值填充新对象。 使用 django/python 可以完成类似的事情吗? 最
每当我编辑用户的角色时,用户都需要注销并重新登录以查看更改。提升用户时没有问题,因为他们在再次登录之前不会看到额外的权限。但是,当降级发生时,用户仍将保留其现有角色,这会带来安全风险。想象一下,撤销一
我的核心数据有线问题。使用 iOS 10 中的 Swift3,每次使用 获取或存储数据时,我都会获得托管对象上下文 func getContext () -> NSManagedObjectCont
我发现当我使用 users_path(user) 时它返回 /users.id 其中 id 是用户的 ID 但我希望它返回 /用户/ID。我的配置 routes.rb 如下所示。 # config/r
我的应用程序在我的测试设备上正常运行(当我通过 ADT 安装它时,当我通过导出的 APK 文件安装它时)但它在 Play Store 测试设备上失败并出现以下错误: Permission Denial
创建模型的第一个条目会抛出错误 我执行了以下命令进行迁移 manage.py makemigrations manage.py migrate 在我执行这些命令以在数据库中创建第一个“数据”之后,一切
我正在尝试实现一个 getter,但它在下面代码 fragment 的最后一行向我显示了这个错误。 代码是—— class AuthRepository extends BaseAuthReposit
我是一名优秀的程序员,十分优秀!