2013-11-23 13 views
11

बाईपास करने के लिए curl में चोरी हुई कुकी का उपयोग करके मुझे एक वेब पेज को संसाधित करना होगा। यह वेब पेज YII framework पर आधारित है, और लॉगिन पेज CSRF tokens द्वारा संरक्षित है। जब मैं POST method द्वारा लॉगिन प्रमाण-पत्र पास करता हूं। मुझे error 400 और The CSRF token could not be verified संदेश मिलता है।सीएसआरएफ

मुझे नहीं पता कि इस सुरक्षा को कैसे पारित किया जाए। मैं तंत्र को समझ नहीं पा रहा हूं। जब मैं क्रोम ब्राउज़र द्वारा लॉगिन करता हूं, तो मुझे लगता है कि POST संदेश कैसा दिखता है। इसमें 4 पैरामीटर हैं: सीएसआरएफ कुंजी, लॉगिन, पासवर्ड, एक खाली चर। ब्राउज़र को सीएसआरएफ कुंजी को वापस sanded करने के लिए कैसे मिलता है?

मेरे पास इस वेब पेज के लिए लॉगिन और पासवर्ड है, और मैं सामान्य उपयोगकर्ता के रूप में लॉगिन कर सकता हूं। सीएसआरएफ के खिलाफ केवल लॉगिन पेज सुरक्षित है। क्या मैं सामान्य लॉगिन पर ब्राउज़र द्वारा बनाई गई कुकी (इसे कैसे करें) का उपयोग कर सकता हूं, यह cookie to cURL दें और लॉगिन पृष्ठ के पीछे URLs को प्रोसेस करना प्रारंभ करें?

+0

सीएसआरएफ कुंजी में टाइमआउट सीमा है, इसलिए यदि आप अंतिम लॉगिन से सीएसआरएफ कुंजी का उपयोग करते हैं (कहें कि यह दो दिन पहले था) लॉगिन पेज को फेंकना चाहिए – kirugan

+0

जब भी मैं क्रोम में पुनः लॉगिन करता हूं तो सीएसआरएफ कुंजी अलग होती है। इस प्रकार मुझे लगता है कि सीएसआरएफ कुंजी केवल एक प्रयोग है। – MrMgr

+4

हल किया गया: सीएसआरएफ कुंजी सत्र के लिए जेनरेट की गई है और यह लॉग इन पेज के अंदर सादे पाठ के रूप में है। मैं इसे लॉगिन पेज के स्रोत कोड से कॉपी कर सकता हूं, और POST चर के रूप में अतीत होने के लिए curl स्क्रिप्ट प्रदान करता हूं। प्रत्येक पृष्ठ रीफ्रेश के बाद सीएसआरएफ कुंजी नहीं बदली जाती है, लॉगआउट तक कुंजी कुंजी मान्य होती है। लॉगआउट पर सीएसआरएफ कुंजी को समाप्त करने के लिए सर्वर पर रेत लगाया जाता है। – MrMgr

उत्तर

2

श्रीमान अपनी टिप्पणियों में उत्तर दें। मैंने इसे अन्य लोगों को आसानी से उत्तर की पहचान करने में मदद करने के लिए यहां रखा है।

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

Source

0

CSRF टोकन जगह इस सटीक कार्रवाई मुश्किल बनाने के लिए कर रहे हैं। PHP के साथ ब्राउज़र होने के लिए आपको एक बेहतर तरीका चाहिए। ऐसा करने के लिए, सभी कुकीज को आम तौर पर "कुकी जार" कहा जाता है। कर्ल has that capability का PHP कार्यान्वयन। इस साइट पर भेजे गए सभी कर्ल अनुरोधों को अब से इस कुकी जार का उपयोग करना चाहिए।

अगला आपको सबमिट किए गए सभी फ़ील्ड को पकड़ने के लिए लॉगिन पृष्ठ को पार्स करने की आवश्यकता है। इसमें उपयोगकर्ता नाम, पासवर्ड, सीएसआरएफ, और अन्य छिपे हुए फ़ील्ड शामिल हैं। सुनिश्चित करें कि आपके पास प्रत्येक के लिए मूल्य हैं। यदि यह आपके द्वारा दर्ज नहीं किया जाना चाहिए (उदा। छिपी हुई इनपुट), लॉगिन पेज के HTML को स्क्रैप करें और उन फ़ील्ड को वेरिएबल्स में रखें जिन्हें आप लॉगिन पोस्ट में पास कर सकते हैं। लॉग इन पोस्ट में रेफरर के रूप में स्क्रैप किए गए लॉगिन पेज का यूआरएल भी सुनिश्चित करना सुनिश्चित करें।

पार्सिंग एचटीएमएल थकाऊ हो सकता है, लेकिन SimpleHTMLDOM जैसे पुस्तकालयों को सीएसएस चयनकर्ताओं से परिचित होने पर इसे सरल बनाना चाहिए।

संबंधित मुद्दे