【发布时间】:2014-05-24 17:21:25
【问题描述】:
我已经在我正在做的一个项目中实现了一个安全系统,如下(如果图中有什么不清楚的地方请告诉我,虽然很简单)
这完全按照它应该的方式工作,但是如果有人发出请求,并在客户端收到令牌后立即中止它,那么活动令牌仍将在数据库中,并且可以被恶意使用黑客。
虽然我在 verifyToken 步骤中从数据库中删除了令牌,但如果令牌没有到达它,它仍然可以使用。如果在发出令牌后请求被中止,你们认为处理令牌的方法是什么?
此外,即使客户端获得了对令牌的访问权,他也只能在令牌被标记为无效之前发出一次请求。但是,即使是一个请求也可能非常危险。
更新:我的令牌机制如下:
发送令牌:
1)生成 2 个随机令牌:令牌 1 和令牌 2。
2) 生成这样的哈希:token1+userid+SALT
3)将所有数据存储在数据库中。
4)发送token1、token2和新的hash(我称之为id_hash)
验证令牌:
1)接收token1和token2。
2)如果token2与数据库中的不匹配,则返回FALSE。
3) 从会话中获取用户 ID。
4)按以下顺序散列:token1(received) + userid (session) + SALT
5) 使用收到的 id_hash 验证新验证的哈希。
6) 如果匹配,则返回 TRUE,否则返回 FALSE。
这样,用户只能访问/更改与其用户 ID 相关的数据,而不能访问/更改其他用户的 ID。 大家觉得这够了吗?还是这种方法有缺陷?
我在 apache2 网络服务器上使用 PHP 和 MySQL。
【问题讨论】:
-
一个唯一令牌可以发出多少次请求?
-
@fortune 考虑到令牌在 verifyToken 步骤中被删除,我想说它们只能使用一次。
-
顺便说一句,丢弃,而不是丢弃
-
@CreativeMind 错字:P
-
在你的帖子里... :P
标签: php security authorization