0

我有一个包含免费和付费计划的网络应用程序。

用户选择一个计划,然后注册。注册后,在他付款之前,我使用免费帐户登录用户。一旦他付款并且交易回调成功,我想用他支付的新计划再次登录他。我想到的一种方法是:

1)用户注册 2)他注册了一个免费帐户,并且散列密码存储为 php session var 3)他支付 4)交易成功 5)我调用一个查找散列密码 session var 的 php 文件和基于此更新用户

这种方法有什么明显的问题吗?可以使用散列密码作为会话变量吗?此流程是否存在明显的安全风险?

4

1 回答 1

1

从安全的角度来看,我总是远离任何标识符的密码。加!- 用户可以有相同的密码,所以它可能不是唯一的(当然,你可能会加盐你的哈希,但取决于你的盐的唯一性,你仍然可能有这个问题......)

在您的会话中,我假设您正在为用户存储自己的唯一标识符。这就是你要查找的方式。然后,您可以更改用户(或计划)在数据库中的角色。

如果您需要立即进行实时更改,您有两种选择:

您的用户身份验证和授权系统可以在每个页面加载时访问数据库以获取最新的用户信息。这可能不是一个好主意,因为您只需要在用户的“生命周期”中使用此功能一次。

第二个选项是在付款后使用用户的会话设置一个设置,告诉它只在每次页面加载时检查数据库。一旦您更新了数据库,并且用户看到了更改,并将其应用于当前用户,该标志可能会被关闭,因此它不会继续查询数据库。

当然还有其他选择:您可以在临时文件或数据库中删除用户的会话(如果您使用数据库来存储会话信息)并强制他们登录。我敢肯定还有更多,但我会建议上面的临时主动方法(第 2 点)。

如果您需要更多说明,我很乐意提供帮助。发表评论!:)

于 2013-02-15T14:26:26.890 回答