2013-10-07 23 views
8

Oturum verilerini kullanıcı tarayıcısında tutmayı çok seviyorum ama oturum çerezlerinin oyun çerçevesinde çok güvenli olmamasını sevmiyorum. Eğer birileri kurabiyeyi çalarsa, çerezin süresi sona ermediğinden ve çerezin sona ermesi bu yana yardımcı olmadığından siteye kalıcı olarak erişmek için kullanabilir, çünkü eğer birileri çalınmışsa onu tekrar kullanamaz.Daha güvenli bir şekilde daha güvenli Play Scala çerçeve oturumu tanımlama bilgisi aracılığıyla daha kolay uygulanabiliyor

Kullanıcı hala siteyi kullanıyorsa zaman damgasını yenilemek için zaman damgasını güncellemek için 1 saat ve her 5 dakika sonra oturumu sona erdirmek için zaman damgası ekledim.

Ölçeklendirmek ve oyun oynamak için oldukça yeniyim, bu nedenle her türlü öneri veya daha iyi bir yol elde etmek için çok daha fazla takdir edilecektir.

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 
      } 
     } 
    ) 
    } 
    } 
} 

Çerezler her 5 dk üretti:

The cookies produced every 5min: 
Cookie:PS="a6bdf9df798c24a8836c2b2222ec1ea4a4251f301-username=admin&ts=1381180064" 
Cookie:PS="D7edg7df709b54B1537c2b9862dc2eaff40001c90-username=admin&ts=1381180380" 
+1

Şifreler oturum çerezini oynatır, böylece son kullanma zaman damgasını eklemek güvenlidir. Doğru yapıyorsun, sunucu tarafı oturumuna gerek yok. – lambdas

+0

Aynı şeyi yapmayı düşünüyorum ama bunun içinde bir kusur görüyorum. F (kullanıcı) (istek) araması oturumu zaten değiştirmişse ne olur? Bu durumda, isteğin oturumunu değişiklik için temel olarak kullandığınızda, bu değişikliği kaybedersiniz, değil mi? – agabor

+0

Sadece merak ediyorum: neden bu "rollover" özelliğine ihtiyacınız var? Her bir onaylanmış isteğinizdeki zaman damgasını güncellemek yeterli olmaz mı (tabii, süresi dolmamışsa)? – Martin

cevap

2

makul görünüyor bana, herhalde, gerçi o serverside koymak Müşteriye "session-id" vermek ve bir kullanıcı oturumunu kapattığında oturumu silin. Tüm istemci tarafında yapmak, zaman aşımı için beklemek dışında çalınmışsa oturumu geçersiz kılmanın hiçbir yolu olmadığı anlamına gelir.

İlgili konular