2010-11-29 12 views
19

का उपयोग कर जालसाजी रोकथाम मैं अपने वेब एप्लिकेशन के लिए क्रॉस-साइट अनुरोध जालसाजी रोकथाम को कार्यान्वित करना चाहता हूं जो स्ट्रैट्स 1.x फ्रेमवर्क पर आधारित है। मुझे पता है कि स्ट्रैट्स 2 फ्रेमवर्क इसके लिए टोकन इंटरसेप्टर प्रदान करते हैं और मैं फिल्टर का उपयोग करके समान कार्यक्षमता को कार्यान्वित कर सकता हूं।क्रॉस-साइट अनुरोध स्ट्रेट्स टोकन

मुझे कुछ परेशानियों के बारे में थोड़ा उलझन है 1) मैं सरल तरीके से अद्वितीय टोकन कैसे उत्पन्न कर सकता हूं?

वहाँ struts 1.x ढांचे टोकन प्रणाली का उपयोग कर में किसी भी मुद्दे हैं (मैं इस उद्देश्य के जो डुप्लिकेट फ़ॉर्म प्रविष्टि से बचने के लिए इस्तेमाल होता है के लिए कार्रवाई वर्ग टोकन का उपयोग कर सकते हैं) CSRF रोकथाम

उत्तर

17

Struts 1 कार्रवाई टोकन तरीकों काम के लिए स्ट्रैट्स 2 टोकन इंटरसेप्टर की तरह यह आपके सत्र में एक टोकन जोड़ देगा और फ़ॉर्म सबमिशन पर जांच करेगा, लेकिन यह एक और अधिक मैन्युअल प्रक्रिया है। मूल वर्कफ़्लो है:

  1. उपयोगकर्ता स्ट्रैट्स एक्शन (सीधे जेएसपी पर नहीं) के माध्यम से फॉर्म में आता है। स्ट्रैट्स एक्शन जेएसपी पर अग्रेषित करने से पहले saveToken(request) पर कॉल करेगा जिसमें फॉर्म शामिल है।
  2. जेएसपी पर फॉर्म <html:form> टैग का उपयोग करना चाहिए।
  3. आपका कार्य जिस फ़ॉर्म को सबमिट करता है, पहले isTokenValid(request, true) पर कॉल करेगा, और आपको false पर लौटने पर त्रुटि संदेश के साथ पहली क्रिया पर रीडायरेक्ट करना चाहिए। यह अगले अनुरोध के लिए टोकन को भी रीसेट करता है।

ऐसा करने से न केवल डुप्लिकेट फॉर्म सबमिशन को रोका जाएगा, लेकिन किसी भी स्क्रिप्ट को पहले स्ट्रूट्स एक्शन को हिट करना होगा और फॉर्म सबमिट करने के लिए दूसरी स्ट्रैट्स एक्शन में सबमिट करने से पहले सत्र प्राप्त करना होगा। चूंकि कोई साइट किसी अन्य साइट के लिए सत्र सेट नहीं कर सकती है, इसलिए इसे सीएसआरएफ को रोकना चाहिए।

यदि आप आमतौर पर सीधे अपने जेएसपी पर उपयोगकर्ताओं को भेजते हैं, तो नहीं। इसके बजाय, ActionForward से इनहेरिट एक नया वर्ग बना सकते हैं और इस सेट के रूप में यह execute() विधि है:

public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { 
    saveToken(request); 
    return super.execute(mapping, form, request, response); 
} 
मैन्युअल प्रक्रिया के बजाय
+0

, एक नहीं बस ActionServlet का विस्तार करने और 'प्रक्रिया में एक ही तर्क को सम्मिलित करने में सक्षम हो जाएगा() टोकन वैधता की जांच करने के लिए विधि? मैं सीएसआरएफ टोकन को बदलने की इच्छा को भी समझ नहीं पा रहा हूं - जो आपदा के लिए एक रसीद की तरह लगता है क्योंकि यह साइट पर किसी भी अन्य खुले पेज/रूपों को अमान्य कर देगा। –