处理未使用的安全令牌的最佳方法?

时间:2014-05-24 08:47:21

标签: php security authorization

我已经在我正在进行的项目中实施了一个安全系统,如下所示(请告诉我图中是否有不清楚的地方,但它很简单)

chart

这与它应该完全一样,但如果有人发出请求,并在客户端收到令牌后立即中止,那么活动令牌仍然在数据库中,并且可以被恶意使用黑客。

虽然我在verifyToken步骤中从数据库中删除了令牌,但如果令牌没有到达它,它仍然可用。如果在发出令牌后请求被中止,你们认为处理令牌的方法是什么?

此外,即使客户端获得对令牌的访问权限,他也只能在令牌被标记为无效之前发出一个请求。但是,即使是一个请求也可能非常危险。

更新 :我的令牌机制如下:

发送令牌:

1)生成2个随机令牌:token1和token2。

2)生成如下的哈希:token1 + userid + SALT

3)将所有数据存储在数据库中。

4)发送token1,token2和新的哈希(我称之为id_hash)

验证令牌:

1)接收token1和token2。

2)如果token2与数据库中的不匹配,则返回FALSE。

3)从会话中获取用户ID。

4)按以下顺序哈希:token1(已接收)+ userid(会话)+ SALT

5)使用收到的id_hash验证新验证的哈希值。

6)如果匹配,则返回TRUE,否则返回FALSE。

这样,用户只能访问/更改与其用户ID相关的数据,而不能访问其他用户的ID。 你觉得这样就够了吗?或者这种方法存在缺陷吗?

我在apache2 webserver上使用PHP和MySQL。

2 个答案:

答案 0 :(得分:0)

在客户端发送令牌存储时随机字符串用作盐(不是盐随机检查)

由于所有请求都应在会话中发送,请发送此随机字符串以及验证您正在与正确的客户端通信的请求(在第一阶段发送 - 请求令牌然后在验证时验证此令牌)。

这显然不会阻止任何人拦截消息,但是如果他们获得了未使用的令牌,那么没有随机字符串作为第二次测试就没用了。

此外,还会为您的令牌添加时间戳 - 如果在创建后的10秒内未对其进行验证,则会使其无效。

答案 1 :(得分:0)

这是我的方法。

我会在每3分钟后重新验证并重新生成令牌。

在处理该令牌发出的任何请求之前,我会检查它是否有效。

这将自动验证较旧的令牌。

第二种方式:

TimeStamp:使用时间戳检查该令牌的有效性。如果该令牌在最后3分钟内没有任何活动,则使该令牌无效。为此,您需要cron job来使该脚本在每个特定的时间间隔内运行。

希望它会帮助你。