मैं एक बुकमार्कलेट बना रहा हूं ताकि कोई उपयोगकर्ता किसी भी पेज से सीओआरएस का उपयोग करके मेरे सर्वर पर डोमेन पोस्ट पार कर सके। पोस्टिंग से पहले उपयोगकर्ता को प्रमाणित करना होगा और कुकीज़ का उपयोग किया जाता है। क्या किसी दुर्भावनापूर्ण वेबसाइट को उपयोगकर्ता के क्रेडेंशियल का उपयोग करके अपने सर्वर पर क्रॉस डोमेन पोस्ट करने के लिए अपने वेबपृष्ठ में जावास्क्रिप्ट कोड को इम्बेड करने से रोकने का कोई तरीका है?सीओआरएस का उपयोग करते समय सीएसआरएफ को रोकना?
5
A
उत्तर
1
सिद्धांत रूप में, इसके लिए एक समाधान हो सकता है।
- प्रत्येक उपयोगकर्ता के बुकमार्कलेट में एक अद्वितीय सीएसआरएफ टोकन एम्बेड करें।
- किसी अज्ञात फ़ंक्शन में बुकमार्कलेट में कोड लपेटें, इसलिए पृष्ठ तक इसकी पहुंच नहीं होगी।
- अपने बुकमार्कलेट में a strong hash function एम्बेड करें। इसे पूरी तरह से बुकमार्कलेट कोड के भीतर रखा जाना चाहिए, यह सुनिश्चित करने के लिए कि इसे छेड़छाड़ नहीं किया जा सके।
- अपने XMLHttpRequest में, आप भेजें:
- संदेश
- के हैश:
- संदेश
- आपका CSRF टोकन
- एक अनूठा, लंबे समय से नमक
- एक UserID
- एक टाइमस्टैम्प (बस यह सुनिश्चित करने के लिए कि संदेश अब भेजा गया था और दूसरी बार नहीं)
- नमक
- टाइमस्टैम्प
- उपयोगकर्ता ID
- अपने सर्वर पर, आप को मान्य: टाइमस्टैम्प अनुमति त्रुटि मार्जिन (जो आवश्यक है के भीतर है
- ऐसा इसलिए है क्योंकि किसी उपयोगकर्ता के कंप्यूटर घड़ी बंद हो सकती है)
- कि हैश सही है
- यदि सब कुछ सही है, तो आप संदेश पोस्ट कर सकते हैं।
इस अवधारणा के साथ एक दोष है: अगर एक वेबसाइट बुकमार्कलेट (जैसे Array()
के रूप में) द्वारा इस्तेमाल किया कार्यों से किसी के साथ छेड़खानी, दुर्भावनापूर्ण वेबसाइट पर अभी भी, अवरोधन कॉपी और/या संदेश संशोधित करने में सक्षम हो सकता है , यूजर आईडी या सीएसआरएफ टोकन।
नहीं। शायद आप अपनी वेबसाइट के नियंत्रण में 'iframe' पर पोस्ट करने पर विचार कर सकते हैं, और फिर पोस्ट करने से पहले उपयोगकर्ता की पुष्टि() 'है। या आप प्रत्येक उपयोगकर्ता के बुकमार्कलेट में एक अद्वितीय सीएसआरएफ टोकन एम्बेड कर सकते हैं, और फिर ... रुको, मुझे एक विचार मिल रहा है ... – user2428118