[英]httpservletrequest - create new session / change session Id
我正在維護一個Java Web應用程序。
查看登錄代碼,它通過HttpServletRequest的getSession()方法從HttpServletRequest中獲取HttpSession。 (它使用會話中的一些值進行身份驗證)
但是我擔心會話固定攻擊所以在我使用初始會話之后我想要開始新會話或更改會話ID。 這可能嗎?
Servlet 3.0 API不允許您更改現有會話的會話ID。 通常,為了防止會話固定,您只需創建一個新的並使舊的無效。
您可以使這樣的會話無效
request.getSession(false).invalidate();
然后創建一個新的會話
getSession(true)
( getSession()
應該工作)
顯然,如果會話中有要保留的數據,則需要將其從第一個會話復制到第二個會話。
注意,對於會話固定保護,通常認為可以在身份驗證請求上執行此操作。 但是更高級別的安全性涉及拋棄舊會話並為每個請求創建新會話。
從Java EE 7和Servlet API 3.1(Tomcat 8)開始,您可以使用HttpServletRequest.changeSessionId()來實現此類行為。 還有一個偵聽器HttpSessionIdListener
,它將在每次更改后調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.