我正在构建一个允许用户创建,编辑和保存文档的webapp。用户帐户数据库是单独控制的,我已经提供了一个SOAP API,可以告诉我给定的用户名/密码是否有效。
假设用户名/密码有效,API将返回以下信息:
•电子邮件地址
•用户名
•login_number(帐户的唯一ID,似乎是自动增量int)
我将在我自己的数据库中存储我的应用程序的数据,因此我可能会使用login_number将数据绑定到各个用户。
我的问题是,一旦用户成功登录,我应该如何跟踪用户。将login_number存储为cookie会起作用但似乎对我来说是非常不安全的。我正在考虑存储某种随机哈希的cookie,其中包含一个存储该哈希和相关login_number的查找表,但我不确定这是否足够。
标记为PHP / MySQL,因为这是我计划合作的后端,但不确定这对于这个问题真的很重要。
答案 0 :(得分:0)
您可以尝试使用基于nonce的会话对用户号进行哈希处理。将该cookie设置为在登录超时长度(例如30分钟)到期。每个会话随机随机数将有助于防止恶意用户复制您的cookie以获取访问权限的回放攻击,因为每个会话都有一个时间敏感的哈希值。
答案 1 :(得分:0)
这是任何开放式身份验证的常见情况,例如Facebook oAuth 2.0。一旦用户同意您的条款,Facebook就会提供他的用户ID,电子邮件以及随时检查用户是否仍然登录的方式。
所以,有几种方法:
希望这有帮助。
Nonce nonce的想法很简单而且非常可靠。但我不确定它是否适用于您的情况。它基本上是为了保护SOAP调用。 AWS使用类似的东西。
secretKey
。secretKey
(比如说token
)传递当前时间戳的哈希值以及用于创建token
的时间戳。 token
与服务器使用标头中传递的时间戳创建的散列进行比较来验证token
,并将存储在服务器端的其他密钥存储在其中,可以在数据库中作为密码或secretKey。 这种方法实际上不受MITM攻击,但不确定这是否适合您。
客户端服务器对话框如下所示
client ----request timestamp --------> server
<---current timestamp -----------'
--- {ts: timestamp, token: Hash256(timestamp, secretKey)} --> isEqual(token, hash256(ts, secretKey))
| |
Access Denied<- false/ true --> ACCESS
@kramthegram感谢提醒Nonce