2012-03-31 124 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時創建的散列播放不匹配,因此會話將無效。