【问题标题】:Security - is recommended to regenerate authorization codes for each request?安全性 - 是否建议为每个请求重新生成授权码?
【发布时间】:2014-03-03 19:17:56
【问题描述】:

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

【问题讨论】:

  • 您能否编辑您的问题并添加一些示例?它可能会更好地解释您的问题,并且您更有可能得到答案。谢谢!

标签: php web-services security cookies


【解决方案1】:

如果您每次请求都重新生成代码,那么有人刷新得太快,他们将遇到 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 地址和用户代理。 (您可以使用与我上面发布的 sn-p 类似的应用层逻辑来执行此操作。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-10
    • 2012-04-30
    • 2015-06-27
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 2019-01-01
    • 1970-01-01
    相关资源
    最近更新 更多