當運行帶有servlet api的Java Web應用程序(如JSF或JSP頁面)時,會在該行的某處生成一個'唯一'SessionID來標識用戶的會話。sessionID是如何生成的?
我想知道如何生成這些會話ID。他們是否包含客戶的IP?時間戳?隨機數字?
其次,我想知道這一代發生在哪裏?這是依賴於運行應用程序的服務器嗎?
當運行帶有servlet api的Java Web應用程序(如JSF或JSP頁面)時,會在該行的某處生成一個'唯一'SessionID來標識用戶的會話。sessionID是如何生成的?
我想知道如何生成這些會話ID。他們是否包含客戶的IP?時間戳?隨機數字?
其次,我想知道這一代發生在哪裏?這是依賴於運行應用程序的服務器嗎?
原來,對於Tomcat來說,他們最近發佈的Tomcat 7.0.59有一個可擴展的SessionIDGenerator http://tomcat.apache.org/tomcat-7.0-doc/changelog.html –
「的標識符是由servlet容器分配並根據其實施。」
無論何時創建新會話,都會生成jsessionid。
A java.security.MessageDigest
算法通常被使用。
通常生成的ID只是一組隨機數,直到所需的長度,但它根據各種servlet容器中使用的算法而變化。
在的Tomcat6,例如,看一下:
ManagerBase.sessionIdLength
和
ManagerBase.createSession() //which calls generateSessionId()
見http://www.docjar.com/html/api/org/apache/catalina/session/ManagerBase.java.html
所以這看起來像有外的開箱沒有保護反對會話重播。我們測試了它,你確實可以篡改JSESSIONID的cookie值來劫持另一個用戶的會話。 :( –