我的Java应用程序服务器即将与RESTful web服务集成,并将轮询它以获取要显示给我的用户的内容(JSON)。
我的用户使用他们的用户名/密码登录,然后我必须将其散列+salt,然后在每次调用时转发到web服务。web服务获取散列/加盐的登录信息并对其进行身份验证(同样,每次调用)。
假设我不能在web服务端更改任何内容,并且web服务需要哈希/盐水登录凭据作为输入参数(以及API端点、HTTP主体等),那么我可以在客户端采取哪些安全措施来确保用户提供的用户名/密码的安全。
我能做的最糟糕的事情可能就是把它们留在记忆中。我的其他选择是什么?
主要问题是"你想要什么样的保护"。您的用户已经知道他们的用户名和密码,所以您可以考虑将他们保存在客户端是最安全的(至少,您不需要保护这些凭据不受用户的攻击)。盐水+哈希密码可以用作web服务的凭据,因此它们与用户名/密码具有相同的值。您的用户已经将其密码发送到您的服务器,因此,它已经信任您的服务器。
结论:在这种情况下,将散列直接保存在内存中是相当安全的。
为了限制风险,您可能不应该将此哈希存储在永久存储中(数据库、磁盘上的文件…)
如果您想确保您的应用程序保持无状态,那么将此哈希存储在客户端本身(在cookie中)也不是一个坏主意。我们可能会认为,这在一定程度上降低了安全性,因为它也为客户端攻击打开了哈希。
这里真正的问题是什么
真正的问题是,客户端需要信任您的服务器,因此您需要承担确保保持信任的责任。这就是为什么像OpenId这样的解决方案很有趣:它们限制了对第三方的信任。