TLDR: मूल स्पूफिंग से दुर्भावनापूर्ण कोड को रोकने के लिए कुछ भी नहीं है। जब ऐसा होता है, तो आपके सर्वर को इसके बारे में कभी पता नहीं चलेगा और अनुरोधों पर कार्य करेगा। कभी-कभी वे अनुरोध महंगे होते हैं। इसलिए किसी भी प्रकार की सुरक्षा के स्थान पर कोर का उपयोग न करें।
मैं हाल ही में कोर के साथ खेल रहा हूं, और मैंने खुद से वही सवाल पूछा है। मैंने पाया है कि जब यह एक को देखता है तो ब्राउज़र एक खराब कॉर्स अनुरोध को जानने के लिए पर्याप्त स्मार्ट हो सकता है, लेकिन आपका सर्वर उतना स्मार्ट नहीं है।
पहली चीज़ जो मुझे मिली वह थी कि Origin
हेडर एक HTTP निषिद्ध हेडर नाम है जिसे प्रोग्रामेटिक रूप से संशोधित नहीं किया जा सकता है। जिसका अर्थ है कि आप Google Chrome के लिए संशोधित हेडर का उपयोग करके इसे लगभग 8 सेकंड में संशोधित कर सकते हैं ।
इसका परीक्षण करने के लिए, मैंने दो क्लाइंट डोमेन और एक सर्वर डोमेन स्थापित किया। मैंने सर्वर पर एक CORS श्वेतसूची को शामिल किया, जिसने क्लाइंट 1 से CORS अनुरोधों की अनुमति दी, लेकिन क्लाइंट 2 से नहीं। मैंने दोनों ग्राहकों का परीक्षण किया, और वास्तव में क्लाइंट 1 के CORS अनुरोध सफल हुए जबकि क्लाइंट 2 विफल रहा।
फिर मैंने Origin
क्लाइंट 1 के मैच के लिए क्लाइंट 2 के हेडर को स्पूफ किया । सर्वर ने स्पूफ़्ड Origin
हेडर प्राप्त किया , और सफलतापूर्वक श्वेतसूची जांच पास की (या यदि आप एक ग्लास-आधा-खाली प्रकार का लड़का हैं तो असफल रहे)। उसके बाद, सर्वर ने उन सभी संसाधनों का उपभोग करके सावधानीपूर्वक प्रदर्शन किया जो इसे उपभोग करने के लिए डिज़ाइन किया गया था (डेटाबेस कॉल, महंगे ईमेल भेजना, और भी अधिक महंगे एसएमएस संदेश भेजना आदि)। जब ऐसा किया गया था, तो सर्वर ने ख़ुशी-ख़ुशी Access-Control-Allow-Origin
हेडर को ब्राउज़र में वापस भेज दिया ।
मैंने जो दस्तावेज़ पढ़ा है, वह बताता है कि Access-Control-Allow-Origin
प्राप्त Origin
मूल्य अनुरोध में भेजे गए मूल्य से बिल्कुल मेल खाना चाहिए । उन्होंने मैच किया, इसलिए जब मैंने क्रोम में निम्न संदेश देखा तो मैं आश्चर्यचकित रह गया:
XMLHttpRequest लोड नहीं किया जा सकता है http://server.dev/test
। 'एक्सेस-कंट्रोल-अलाउंस-ओरिजिन' हेडर का एक मान http://client1.dev
होता है जो आपूर्ति की गई उत्पत्ति के बराबर नहीं होता है। http://client2.dev
इसलिए उत्पत्ति की अनुमति नहीं है।
मैंने जो दस्तावेज़ पढ़ा है, वह सटीक नहीं लगता है। Chrome का नेटवर्क टैब स्पष्ट रूप से अनुरोध और प्रतिक्रिया हेडर दोनों को दिखाता है http://client1.dev
, लेकिन आप इस त्रुटि में देख सकते हैं कि क्रोम किसी भी तरह से वास्तविक मूल को http://client2.dev
जानता है और प्रतिक्रिया को सही ढंग से अस्वीकार करता है। जो इस बिंदु पर कोई फर्क नहीं पड़ता क्योंकि सर्वर ने पहले से ही खराब अनुरोध स्वीकार कर लिया था और मेरे पैसे खर्च किए थे।
foo.com
) परोसा जाता है, उसेAccess-Control-Allow-Origin
हेडर प्रदान करना होगा अन्यथा ब्राउज़र अनुरोध करने की अनुमति नहीं देता हैbar.com
।