在我的登录页面中,我通过用户名和密码(从 jsp 页面获取)登录,然后检查 LDAP,如果凭据正确,则继续浏览其他页面。
我想在某个地方存储用户名和密码,因为在接下来的一些页面中,我可能需要它们来制作其他东西。
我想将它们存储在会话中,但我担心这会带来安全问题。我错了吗?也许将它们存储在数据库中并在每次需要它们时查询数据库,并在会话中仅存储指向数据库记录的 ID 更好? (这可能没问题,但也许存在更快更好的方法)
哪种方式可以更好地存储它们?
不同地方不同密码
您应该为 Web 应用程序和 LDAP 使用不同的密码。就像现在一样,发现 LDAP 密码的攻击者会自动获得对您的应用程序的访问权限,反之亦然。
在 Web 应用程序中创建新密码时,通过检查其相等性(相对于 LDAP 密码),强制用户(通常希望在所有地方使用相同的密码,因为这样很容易记住)选择不同的密码。
切勿保存密码
您不应将用户密码保存在任何地方,因为任何具有数据库访问权限的人都可以检索所有密码。
正确的做法不是加密, but one-way hashing(更好地与Salt, 阻止彩虹桌攻击):
- 当用户创建密码时对密码进行哈希处理,然后将结果保存在数据库中。
- 当用户登录时,对他输入的密码进行哈希处理,然后根据数据库中的哈希值检查生成的哈希值。
- 如果用户忘记密码,请重置密码并要求他选择一个新密码。
在 Java 中最好的实现之一是jBCrypt, 基于BCrypt.
始终首选 char[] 而不是 String 来处理密码
因为由于不同的原因它更安全乔恩·斯基特说过 :)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)