我有一个免费和付费计划的网络应用程序。
用户选择一个计划,然后注册。注册后,在他付款之前,我使用免费帐户登录用户。一旦他支付并且交易回调成功,我想再次使用他支付的新计划登录他。我想到这样做的一种方法是:
1)用户注册 2)他在免费帐户注册,散列密码存储为php session var 3)他支付 4)交易成功 5)我调用一个查找散列密码会话var的php文件,并根据该
更新用户这种方法有什么明显的错误吗?将散列的pword用作会话变量是否可以?这种流程是否存在明显的安全风险?
答案 0 :(得分:1)
从安全的角度来看,我始终不会使用任何标识符的密码。加! - 用户可以使用相同的密码,因此它可能不是唯一的(当然,您可能正在使用哈希值,但根据您的盐的独特性,您仍然可能遇到此问题...)
在您的会话中,我假设您正在为用户存储自己的唯一标识符。这就是你如何看待它。然后,您可以在数据库中更改用户(或计划)的角色。
如果您需要立即实时更改,您有两种选择:
您的用户身份验证和授权系统可能会在每次加载页面时访问数据库以获取最新的用户信息。这可能不是一个好主意,因为您只需要在用户的“生命周期”中使用此功能一次。
第二个选项是在付款后设置用户会话的设置,告诉它只在每次页面加载时检查数据库。更新数据库并且用户看到更改后,将其应用于当前用户,该标志可以关闭,因此不会继续查询数据库。
当然还有其他选项:您可以在临时文件或数据库中删除用户的会话(如果您使用db来存储会话信息)并强制他们登录。我相信还有更多,但我会建议上面的临时主动方法(第2号)。
如果您需要进一步澄清,我很乐意提供帮助。发表评论! :)