安全性 - 建议为每个请求重新生成授权码?

时间:2014-02-06 17:24:25

标签: php web-services security cookies

假设您有一个包含80个字符的字符串的“代码”,它是您的应用程序的访问代码。建议每次向应用程序发出请求时重新生成此代码,或者在创建页面的第一个会话时重新生成它?我选择使用第一种方法,但我注意到虽然有一个长轮询请求是不可能发送请求(因为我必须等待请求截止日期,以获得一个新的cookie)。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

如果每次请求都重新生成代码,那么有人刷新太快,他们将遇到HTTP竞争状态并丢失会话。这造成了可用性的噩梦。

每次升级权限时重新生成会话ID(例如,用户登录,或者如果用户具有“更改权限”功能,则可以在用户模式和管理模式之间切换等)。如果您想要定期超时,请执行以下操作:

session_start();
if(!isset($_SESSION['birth'])) $_SESSION['birth'] = time();
if( time() - $_SESSION['birth']) > 60 ) {
   // Every minute
   session_regenerate_id();
   $_SESSION['birth'] = time();
}

对安全性更重要的是使用HTTPS(TLS 1.1+,如果你可以侥幸使用它)使用HSTS来防止会话固定,指定熵文件(例如/dev/urandom),以及可选地将会话绑定到IP地址和用户代理。 (您可以使用与我上面发布的代码段类似的应用程序层逻辑来执行此操作。)