scala - 通过 cookie 实现更安全的 Play Scala 框架 session 的更好方法

标签 scala playframework-2.0

我真的很喜欢将 session 数据保存在用户浏览器上的想法,但不喜欢 session cookie 在游戏框架中不是很安全的事实。如果有人窃取了 cookie,他/她可以使用它来永久访问该站点,因为 cookie 签名不会过期并且 cookie 过期在这里没有帮助,因为如果有人偷了它,它不会停止重新使用 cookie。

如果用户仍在使用该站点,我已添加时间戳以在 1 小时和每 5 分钟后使 session 过期,以更新时间戳,因此 cookie 签名正在滚动和过期。

我对 Scala 和 play 框架很陌生,所以任何建议或更好的方法来实现同样的目标将不胜感激。

trait Secured {
  def withAuth(f: => String => Request[AnyContent] => Result) = {
    Security.Authenticated(username, onUnauthorized) { user =>
        Action(request => {

          val sessionRolloverPeriod = 300
          val sessionExpiryTime = 3600
          val sessionCreationTime: Int = request.session("ts").toInt
          val currentTime = System.currentTimeMillis() / 1000L

          if(currentTime <= (sessionCreationTime + sessionExpiryTime)) {
            if(currentTime >= (sessionCreationTime + sessionRolloverPeriod)) {
              f(user)(request).withSession(request.session + ("ts" -> (System.currentTimeMillis() / 1000L).toString))
            } else {
              f(user)(request)
            }
          } else {
            Results.Redirect(routes.Auth.login()).withNewSession
          }
        }
      )
    }
  }
}

每 5 分钟产生的 cookies :
The cookies produced every 5min: 
Cookie:PS="a6bdf9df798c24a8836c2b2222ec1ea4a4251f301-username=admin&ts=1381180064"
Cookie:PS="D7edg7df709b54B1537c2b9862dc2eaff40001c90-username=admin&ts=1381180380"

最佳答案

对我来说似乎合理,但我可能将其放在服务器端,给客户端一个“ session ID”并在用户注销时删除 session 。在客户端执行所有操作意味着如果 session 被盗,除了等待超时之外,无法使 session 无效。

关于scala - 通过 cookie 实现更安全的 Play Scala 框架 session 的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19235043/

相关文章:

generics - Scala:是否可以指示实现某种方法的泛型类

scala - HList/KList 是否适合作为方法参数?如何引用?类型列表?

list - Scala 反转 zip

playframework - 如何使用 Play Framework 2.2.x 在 build.sbt 中导入模板

java - 使用 Heroku eclipse 插件时,源文件夹不是 Java 项目

amazon-web-services - 适用于Amazon AWS的Dockerfile脚本

scala - Scala 2.13 中缺少导入 scala.collection.parallel

java - 如何使用 GridBagLayout 将组件放在右下角?

scala - 在 SBT 中,如何将 addSbtPlugin 与 Github URL 一起使用?

java - 在play 2.0框架中执行查询时出错