2012-03-31 63 views
0

我读了玩安全指南playframework - 安全指南没有提到GET方法的安全性?

http://www.playframework.org/documentation/1.2.4/security

,但如果我改变我的cookie在会话不同的用户id,然后提出请求时会发生什么。我知道有一把钥匙不再匹配,但我没有在安全指南中看到在这种情况下会发生什么。我会怀疑GET请求失败并播放清除cookie,以便用户可以重新启动(万一它只是一个错误),并向他们显示访问被拒绝页面或其他东西?

这里会发生什么?

回答

2

让我们试着看到安全模块的源会发生什么:

if (!session.contains("username")) { 
    flash.put("url", "GET".equals(request.method) ? request.url : "/"); 
    login(); 
} 

...和登录方法

public static void login() throws Throwable { 
     Http.Cookie remember = request.cookies.get("rememberme"); 
     if (remember != null && remember.value.indexOf("-") > 0) { 
      String sign = remember.value.substring(0, remember.value.indexOf("-")); 
      String username = remember.value.substring(remember.value.indexOf("-") + 1); 
      if (Crypto.sign(username).equals(sign)) { 
       session.put("username", username); 
       redirectToOriginalURL(); 
      } 
     } 
     flash.keep("url"); 
     render("Application/login.html"); 
    } 

所以,关于你的问题,并根据您的步骤,你将被重定向登录页面。

0

就像在Orest V的代码中所显示的那样,play使用cookies内容和您的application.secret创建一个散列并将其添加到cookie的内容中。如果用户手动更改cookie,则散列将与读取cookie时创建的散列播放不匹配,因此会话将无效。