भारत की एंटरप्राइज़ Java डेवलपमेंट कम्युनिटी में Spring Boot बहुत आम है, और वहाँ एक जानी-मानी गलती होती है: @CrossOrigin(origins = "*") एनोटेशन कंट्रोलर पर लगा देना ताकि लोकल टेस्टिंग में CORS एरर से बचा जा सके, फिर वही कोड बिना बदले प्रोडक्शन में डिप्लॉय हो जाता है। जिस पल कोई डेवलपर allowCredentials(true) भी जोड़ देता है, ब्राउज़र इसे रिजेक्ट करना शुरू कर देता है — क्योंकि वाइल्डकार्ड ओरिजिन और credentials साथ काम नहीं करते।
सेम-ओरिजिन पॉलिसी
डिफ़ॉल्ट रूप से, ब्राउज़र Same-Origin पॉलिसी लागू करते हैं: एक ओरिजिन (डोमेन + प्रोटोकॉल + पोर्ट) के पेज का JavaScript कोड दूसरे ओरिजिन को भेजी गई रिक्वेस्ट का रिस्पॉन्स नहीं पढ़ सकता। यह एक बुनियादी सुरक्षा मैकेनिज़्म है जो किसी साइट के मैलिशियस कोड को दूसरी साइट से डेटा चुराने से रोकता है, जहाँ यूज़र लॉग-इन है।
CORS इस पॉलिसी को कैसे ढील देता है
CORS (Cross-Origin Resource Sharing) HTTP हेडर का एक सेट है जिसके ज़रिए सर्वर साफ़ तौर पर ख़ास (या सभी) बाहरी ओरिजिन को अपने रिस्पॉन्स पढ़ने की इजाज़त देता है। मुख्य हेडर है Access-Control-Allow-Origin, जो बताता है कि कौन-से डोमेन अनुमति प्राप्त हैं।
वाइल्डकार्ड-प्लस-credentials का जाल
credentials: 'include' के साथ भेजी गई रिक्वेस्ट पर — जो किसी दूसरे सबडोमेन की API को सेशन कुकी भेजने के लिए ज़रूरी होता है — ब्राउज़र Access-Control-Allow-Origin: * को बिल्कुल स्वीकार नहीं करता। स्पेसिफ़िकेशन साफ़ तौर पर वाइल्डकार्ड ओरिजिन और credentials को एक साथ इस्तेमाल करने पर रोक लगाती है; सर्वर को रिक्वेस्ट भेजने वाला असल ओरिजिन ही वापस भेजना होता है।
यह क्यों ज़रूरी है
- CORS एरर डिबग करना और यह जानना कि सर्वर पर ठीक-ठीक कौन-सा हेडर मिसिंग है।
- Spring Boot में लोकल टेस्टिंग के लिए इस्तेमाल हुआ वाइल्डकार्ड
@CrossOriginप्रोडक्शन में जाने से पहले पकड़ना। - "सिंपल" रिक्वेस्ट और preflight (OPTIONS) रिक्वेस्ट के बीच फ़र्क़ समझना।
CORS सर्वर को अटैक से नहीं बचाता
यह एक आम ग़लतफ़हमी है कि CORS सर्वर-साइड सुरक्षा उपाय है — असल में यह सिर्फ़ यह सीमित करता है कि ब्राउज़र में JavaScript क्या पढ़ सकता है। curl, Postman या बैकएंड स्क्रिप्ट सीधे इस्तेमाल करने वाला हमलावर CORS को पूरी तरह नज़रअंदाज़ कर सकता है, क्योंकि ये टूल Same-Origin पॉलिसी लागू नहीं करते। CORS को कभी सर्वर पर असली ऑथेंटिकेशन और ऑथराइज़ेशन का विकल्प नहीं समझना चाहिए।