स्प्रिंग एमवीसी, स्प्रिंग सिक्योरिटी, और टॉमकैट: सेशन आईडी और लॉस्ट सेशन डेटा बदल गया

वोट
16

मैं जिस वेबसाइट का समर्थन कर रहा हूं, उसे स्प्रिंग एमवीसी (4.2.9.RELEASE), स्प्रिंग सिक्योरिटी (3.2.5.RELEASE), JSP और हाइबरनेट (4.3.8.Final) के साथ विकसित किया गया था। फ्रंटएंड एक लोड बैलेंसर (केम्प लोडमास्टर 3000) है और साइट टॉमकैट (8.5.54) पर चलती है। इस मुद्दे का कारण खोजने के लिए, मैं लोड बैलेंसर के पीछे केवल एक टॉमकैट उदाहरण चला रहा हूं ताकि एक सरल प्रणाली हो। साइट पर प्रत्येक पृष्ठ (सार्वजनिक पृष्ठ और प्रमाणीकरण के बाद देखे गए पृष्ठ) HTTPS के तहत चलता है।

निम्नलिखित सरलीकृत कोड दिखाता है कि समस्या कैसे प्रदर्शित करें:

@RequestMapping(value=/form, method = RequestMethod.GET)
public String surveyPageGet(HttpServletRequest request, 
    HttpServletResponse response,
    Model model, Map<String, Object> map) throws IOException {

    request.getSession().setAttribute(token, token-value);
    System.out.println(request.getSession().getId());

    return myform;
}

@RequestMapping(value=/form, method = RequestMethod.POST)
public String surveyPageGet(HttpServletRequest request, 
    HttpServletResponse response,
    Model model, Map<String, Object> map) throws IOException {

    System.out.println(request.getSession().getAttribute(token));
    System.out.println(request.getSession().getId());

    return redirect:/success;
}

लोड बैलेंसर पर सत्र का समय 60 मिनट है और इसका लगातार मोड है

Super HTTP and Source IP

Tomcat पर सत्र का समय भी web.xml में 60 मिनट का है

<session-config>
    <session-timeout>60</session-timeout>
    <tracking-mode>COOKIE</tracking-mode>
</session-config>

वसंत सुरक्षा में संबंधित सेटअप निम्नलिखित है।

<security:http auto-config=false use-expressions=true request-matcher=regex entry-point-ref=authenticationEntryPoint >
    <security:intercept-url pattern=^\/secure\/.*$ access=hasRole('ROLE_USER')  />
    <security:access-denied-handler ref=accessDeniedHandler />
    <security:logout invalidate-session=true logout-url=/secure/logout logout-success-url=/ delete-cookies=JSESSIONID />
    <security:custom-filter ref=authenticationFilter position=FORM_LOGIN_FILTER />  
    <security:anonymous username=guest granted-authority=ROLE_GUEST />
</security:http>

यहां POST विधि में सत्र आईडी और सत्र डेटा के बारे में मेरी टिप्पणियां हैं। समय की एक बड़ी प्रतिशत के लिए, POST विधि एक ही सत्र आईडी और टोकन मूल्य को प्रिंट करती है यदि फॉर्म प्रदर्शित होने के बाद 60 मिनट के भीतर जमा होता है। यह समझ में आता है। मुझे समझ में नहीं आता है कि बहुत कम प्रतिशत मामलों में, जिसमें फॉर्म जमा करने की प्रक्रिया 60 मिनट की सीमा से पहले होती है, सत्र आईडी में परिवर्तन होता है और टोकन मूल्य शून्य होता है या सत्र आईडी वही रहता है जो टोकन मूल्य शून्य है। ।

यदि सत्र समाप्त नहीं होता है तो मैं सत्र आईडी को बदलने और सत्र डेटा को नुकसान से कैसे रोक सकता हूं? मुझे वास्तव में इसकी आवश्यकता है क्योंकि साइट कैसे काम करती है। मैं एक संभावित फिक्स के लिए ऑनलाइन बहुत समय बिताता हूं और कई और विभिन्न परीक्षण किए (इस संभावना को बाहर करने के लिए कोड जोड़ना कि समस्या स्पैम या हमले के कारण होती है), लेकिन कोई सफलता नहीं।

कृपया बेझिझक मुझे बताएं कि क्या आपको साइट के बारे में अधिक जानकारी की आवश्यकता है।

07/06/2020 को 17:53
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more