标签: password-storage

我应该如何道德地接近用户密码存储以便以后的明文检索?

随着我继续构建越来越多的网站和Web应用程序,我经常被要求以一种方式存储用户的密码,如果/当用户遇到问题时可以检索它们(要么通过电子邮件发送忘记的密码链接,请通过当我能够对抗这种做法时,我会做很多"额外"编程,以便在不存储实际密码的情况下进行密码重置和管理协助.

当我无法抗争(或无法获胜)时,我总是以某种方式对密码进行编码,以至于它至少不会以明文形式存储在数据库中 - 尽管我知道如果我的数据库被黑客攻击破坏密码的罪魁祸首并不需要太多,所以这让我感到不舒服.

在一个完美的世界里,人们经常更新密码,而不是在许多不同的网站上复制密码 - 不幸的是,我知道许多人拥有相同的工作/家庭/电子邮件/银行密码,甚至在需要帮助时自由地给我.如果我的数据库安全程序由于某种原因失败,我不想成为他们的财务终结负责人.

在道德和道德上,我觉得有责任保护一些用户的生活,即使他们以较少的尊重对待他们.我确信有许多途径可以用来腌制哈希和不同的编码选项,但是当你必须存储它们时,是否有一个"最佳实践"?在几乎所有情况下,我都使用PHP和MySQL,如果这对我应该处理细节的方式有任何不同.

附加信息Bounty

我想澄清一点,我知道这不是你想要做的事情,在大多数情况下拒绝这样做是最好的.但是,我并不是在寻找关于采取这种方法的优点的演讲我正在寻找采取这种方法时采取的最佳步骤.

在下面的一个注释中,我指出,当人们被要求执行安全的密码恢复程序时,主要针对老年人,智障人士或非常年轻人的网站可能会让人感到困惑.虽然在这些情况下我们可能会发现它简单而平凡,但有些用户需要额外的帮助,要么让服务技术人员帮助他们进入系统,要么将其直接通过电子邮件发送/显示给他们.

在这样的系统中,如果用户没有获得这种级别的访问协助,那么来自这些人口统计数据的流失率可能会阻碍应用程序,因此请记住这样的设置.

谢谢大家

这是一个有趣的问题,有很多争论,我很喜欢它.最后,我选择了一个保留密码安全性的答案(我不必保留纯文本或可恢复的密码),但也使我指定的用户群可以登录到系统而没有我从中找到的主要缺点正常的密码恢复.

由于不同的原因,我一直有大约5个答案,但我必须选择最好的答案 - 所有其他答案都是+1.感谢大家!

此外,感谢Stack社区中的每个人都投票赞成这个问题和/或将其标记为最喜欢的.我以100票赞成票作为赞美,并希望这次讨论能够帮助其他与我有同样关切的人.

security password-storage password-encryption

1346
推荐指数
18
解决办法
7万
查看次数

使用pbkdf2进行SALT和HASH

我使用以下方法从nodejs中的crypto lib创建salted和散列密码:

crypto.randomBytes(size, [callback])
crypto.pbkdf2(password, salt, iterations, keylen, callback)
Run Code Online (Sandbox Code Playgroud)

对于randomBytes调用(创建SALT),我应该使用什么尺寸?我听过128位盐,可能高达256位.看起来这个函数使用的是字节大小,所以我可以假设32(256位)的大小就足够了吗?

对于pbkdf2调用,什么是大量的迭代以及密钥(keylen)的长度是多少?

此外,对于存储,我已经看到了在同一列中存储salt,length,iterations和derviedkey的示例.我正在使用一个分隔4 by的例子::,即:

salt::derivedKey::keyLength::iterations
Run Code Online (Sandbox Code Playgroud)

这样做,然后我可以分开::获取4个值,因此我可以根据提供的密码生成派生密钥,以查看它是否匹配.这是存储它的正确方法吗?或者我应该在结合这些价值观时更具"欺骗性"?

passwords password-storage pbkdf2 node.js

25
推荐指数
1
解决办法
1万
查看次数

Sequelize:不要返回密码

我正在使用Sequelize为用户记录执行数据库查找,并且我希望模型的默认行为返回该password记录的字段.该password字段是哈希,但我仍然不想返回它.

我有几个选项可以使用,但似乎没有一个特别好:

  1. 创建一个自定义的类方法findWithoutPasswordUser模型和方法中做了User.findattributes集如图所示Sequelize文档

  2. 做一个正常User.find并过滤控制器中的结果(不是首选)

  3. 使用其他库来去除不需要的属性

有没有更好的办法?最重要的是,如果有一种方法可以在Sequelize模型定义中指定永远不会返回该password字段,但我还没有找到一种方法.

password-storage sequelize.js

25
推荐指数
6
解决办法
1万
查看次数

在Java中安全存储密码的最佳做法是什么?

在Java桌面应用程序中存储密码的推荐方法是什么?

我希望用户能够只输入一次credencials而不会再次提示.

在个人项目中,我一直在使用Preferences API,但我认为这与将其存储在纯文本(安全方面)没有什么不同.

非常感谢

编辑:

非常感谢你的建议.似乎有些混乱,毫无疑问,因为我可能没有把问题弄得很清楚......

我将给出一个假设的场景:

假设我正在为远程数据库创建一个简单的前端,该数据库使用用户名/密码创建连接字符串.通常,每次应用程序启动时都会提示用户输入用户名/密码组合.

将密码存储在用户机器中的最佳方法是什么,无需重新输入(在应用程序启动时自动连接).

一种"记住我"的功能(我知道这本身并不是一个很好的做法...)

EDIT2:

感谢大家的回答.PaŭloEbermann对手头的问题非常有用,Chris Smith的链接很有意思,但我接受了JVerstry的一个,因为密钥库可能是我正在采取的路线.

java security password-storage

24
推荐指数
2
解决办法
2万
查看次数

如何在mysql中创建和存储md5密码

可能是一个非常新手的问题,但是,我一直在阅读并发现在理解密码的创建和存储方面存在一些困难.从我所读到的md5/hash密码是将它们存储在数据库中的最佳方式.但是,我该如何首先创建这些密码?

所以说我有一个用户bob和密码bob123的登录页面 - 我将如何1.将bobs密码输入数据库开始(哈希)2.如何检索并确认哈希密码?

谢谢

php mysql password-storage

23
推荐指数
4
解决办法
13万
查看次数

源代码管理中的密码存储

我们将所有应用程序和db密码以纯文本形式存储在源代码管理中.我们这样做是因为我们的构建/部署过程生成了所需的配置文件,并且还执行了需要这些密码的实际部署(即:针对数据库运行sql需要您使用有效凭据登录到数据库).有没有人有类似的需求,你可以实现这种类型的功能,而不是以纯文本形式存储密码?

password-protection password-storage

19
推荐指数
2
解决办法
8184
查看次数

在WP7应用程序中是否存在用于存储用户名和密码的标准?

我想问一下在Windows Phone应用程序中是否存在用于存储用户名和密码的标准.我正在开发一个项目,在每个被调用的请求上验证用户.所以,我想存储用户名和密码.也许甚至给他们"记住我"的可能性,所以如果没有这样做的标准,我将不得不自己写,但我猜测微软有一个内置的.

password-storage windows-phone-7

18
推荐指数
2
解决办法
2658
查看次数

您是否应该使用AccountManager存储Android应用的用户名和密码?

我想知道是否应该实现AccountManager保存用户凭据,如用户名,电子邮件,密码等.我找不到自己使用它的充分理由.

我不希望其他应用程序有权访问Accounts,我真的不希望它们显示在"帐户和同步"设置中(虽然这可能不是什么大问题).

所以我的问题是:我应该使用它吗?优点缺点?我可以隐藏Accounts其他应用并阻止它们出现在"帐户和同步"中吗?

java android password-storage accountmanager android-account

17
推荐指数
2
解决办法
1万
查看次数

散列时哪些Unicode规范化(和其他处理)适用于密码?

如果我接受完整的Unicode密码,我应该如何在将字符串传递给哈希函数之前对其进行规范化?

目标

如果没有规范化,如果有人ma\u00F1ana在一台计算机上将其密码设置为"mañana"()并尝试使用ma\u006E\u0303ana另一台计算机上的"mañana"()登录,则哈希将不同,登录将失败.这受用户代理或其操作系统的控制.

  • 我想确保那些哈希到同一个东西.
  • 我并不关心Α,А和A(希腊语,西里尔语,拉丁语)等同性字.

参考

Unicode规范化形式:http://unicode.org/reports/tr15/#Norm_Forms

注意事项

  • 任何标准化过程都可能导致冲突,例如"o?ce" == "office".
  • 规范化可以改变字符串中的字节数.

进一步的问题

  • 如果服务器收到的字节序列不是UTF-8(或其他格式),会发生什么?拒绝,因为它不能正常化?
  • 如果服务器收到其Unicode版本中未分配的字符会发生什么?

passwords unicode password-storage unicode-normalization homoglyph

16
推荐指数
1
解决办法
1323
查看次数

使用Windows .NET或ASP.NET应用程序时,存储数据库密码的位置

我有一个困扰我多年的情景.如果必须使用用户名和密码连接到数据库或其他服务(如Web服务),那么在通过.NET程序集连接时,哪里是存储此信息的最安全的位置?我知道你必须加密密码,但是你遇到了一种鸡蛋问题 - 很好 - 你可以对它进行加密,但是你把密钥放在哪里?

在.NET中,您无法对密码进行硬编码,因为您可以反编译.NET代码.

我查看了使用基于程序集的权限与隔离存储,但MS建议不要存储未加密的秘密项目,因为有资格的用户可以获得访问权限,所以我们再次将问题从A点移动到B点.所以对于例如,域管理员由于能够成为域上任何工作站的管理员,因此无需了解数据库中的信息就能够访问.

您可以加密App.Config和Web.Config,但我相信用户可以访问密钥.

我认为你遇到了与DPAPI相同的问题.

我曾考虑过存储密码,在远程数据库中加密并通过操作系统身份验证获取密码,但我们的部门禁止在数据库服务器上存储密码.我很确定我被卡住并想要确认.

c# vb.net asp.net password-protection password-storage

12
推荐指数
2
解决办法
4680
查看次数