正确传输和保护 Web 应用的用户密码

Properly transmitting and securing users' passwords for a web app

提问人:Maltiriel 提问时间:9/1/2012 最后编辑:CommunityMaltiriel 更新时间:9/1/2012 访问量:346

问:

我正在为我的硕士项目开发一个 Web 应用程序。这是一个供教授管理学生项目的系统,它使用 Java 作为服务器端代码,使用 HSQLDB 作为数据库,使用 JSP 作为表示层,并在 tomcat 上运行。将存储的数据不包括任何敏感信息(学生证、财务信息等),但用户名和密码是必需的,因此如果学生将我的应用程序的密码用于其他更重要的应用程序,我想保护密码本身(即使我告诉人们不要这样做,这无疑也会发生)。

我以前从未研究过这种事情,我很迷茫。我确实找到了一篇很好的文章,解释了如何使用 Java 创建密码的哈希值,我在 tomcat 文档中找到了信息,解释了如何设置领域中使用的哈希方案以及如何使用 tomcat 执行 SSL,以及一个 JavaScript 库密码创建哈希值,但我不确定如何将所有部分放在一起, 以及我到底需要什么。

如果我使用 JavaScript 库对密码进行哈希处理并使用 SSL 进行登录步骤(我认为在那之后就没有必要了,因为其他数据不需要保护),那么在数据库中只存储密码的哈希版本,这就足够了吗?还是我需要做更多的事情?我遇到了一个问题,答案讨论了 PBKDF2 和其他一些事情,但它只是让我更加困惑......如果我应该使用这些答案中提到的方案之一,我该怎么做?我没有在 tomcat 或其他文档中看到对它们的引用,所以我不知道我会如何使用它们......

如果有人能消除我的困惑并告诉我安全传输和存储密码的正确方法是什么,我将不胜感激。

java javascript tomcat 密码 hsqldb

评论


答:

3赞 Brad 9/1/2012 #1

SSL 负责保护整个传输层。您无需担心通过 HTTPS 发送的数据。

切勿在数据库中存储真实密码。仅存储使用适当安全(即不是 MD5)哈希函数制作的加盐哈希。对每个哈希使用不同的盐。

如果您遵循这些原则,无论您使用什么组件,您都将拥有合理的用户名/密码存储机制。

评论

2赞 jtahlborn 9/1/2012
确保你给你的哈希加盐
0赞 Brad 9/1/2012
@jtahlborn,是的!我怎么会忘记这一点。添加到答案中,谢谢!
0赞 jtahlborn 9/1/2012
您可以通过存储每个密码使用的算法来使存储面向未来。这允许您在未来升级算法,而不会破坏现有用户。
0赞 jtahlborn 9/1/2012
您可能还想指出,您不需要在客户端进行哈希处理(无论如何,在用户特定的 salt 上都不起作用)。
1赞 Qsario 9/1/2012
以下是有关如何存储密码的更多信息: codahale.com/how-to-safely-store-a-password