डेव्हलपर्सना CORS का समजत नाही
CORS हे वेब डेव्हलपमेंटमधील सर्वात जास्त गैरसमज असलेले सुरक्षा साधन (security tool) आहे. अनेक डेव्हलपर्सना वाटते की ते त्यांच्या सर्व्हरचे संरक्षण करते. पण तसे नाही.
CORS वापरकर्त्याचे (user) संरक्षण करते.
ब्राउझर 'Same-Origin Policy' (SOP) लागू करतो. ही पॉलिसी एखाद्या घातक (malicious) साईटला तुमच्या वतीने दुसऱ्या साईटला विनंती (request) पाठवण्यापासून रोखते. CORS ही केवळ एक पद्धत आहे ज्याद्वारे सर्व्हर ब्राउझरला विशिष्ट साईट्ससाठी तो नियम शिथिल करण्यास सांगतो.
जर तुमची विनंती Postman मध्ये काम करत असेल पण ब्राउझरमध्ये अयशस्वी होत असेल, तर तुम्हाला CORS ची समस्या आहे. Postman हा ब्राउझर नाही, त्यामुळे तो हे नियम लागू करत नाही.
तुम्ही टाळल्या पाहिजेत अशा काही सामान्य चुका:
- CORS चा वापर केवळ सुरक्षा म्हणून करणे. CORS हे ऑथेंटिकेशन (authentication) नाही. तुम्हाला अजूनही टोकन्स (tokens), पासवर्ड आणि रेट लिमिटिंगची (rate limiting) गरज आहे.
- वाइल्डकार्ड ट्रॅप (wildcard trap). जर तुम्हाला कुकीज (cookies) किंवा क्रेडेंशियल्स (credentials) पाठवायचे असतील, तर तुम्ही
Access-Control-Allow-Origin: *वापरू शकत नाही. तुम्हाला नेमका डोमेन (domain) नमूद करावा लागेल. - प्रीफ्लाइट विनंत्यांकडे (preflight requests) दुर्लक्ष करणे. अनेक API कॉल्स करण्यापूर्वी ब्राउझर आपोआप OPTIONS विनंती पाठवतात. जर तुमच्या सर्व्हरने OPTIONS ब्लॉक केले, तर तुमची प्रत्यक्ष विनंती अयशस्वी होईल.
- एरर हेडरची (error headers) कमतरता. जर तुमच्या API ने CORS हेडरशिवाय 401 किंवा 500 एरर परत केला, तर ब्राउझर खरा एरर लपवतो. तुम्हाला फक्त एक सामान्य CORS संदेश दिसेल.
हे कसे सुधारावे:
- OPTIONS विनंत्या हाताळा. तुमच्या सर्व्हरने प्रीफ्लाइट कॉल्ससाठी 200 किंवा 204 स्टेटस परत केल्याची खात्री करा.
- मिडलवेअर (middleware) वापरा. CORS मिडलवेअर लेव्हलवर कॉन्फिगर करा जेणेकरून ते एररसह सर्व प्रतिसादांचा (responses) समावेश करेल.
- Vary हेडर सेट करा. जर तुम्ही डायनॅमिकली अनेक ओरिजिनला परवानगी देत असाल, तर तुम्हाला तुमच्या प्रतिसादात
Vary: Originजोडणे आवश्यक आहे. - योग्य साधनांचा वापर करा. Node.js साठी,
corsपॅकेज वापरा. Django साठी,django-cors-headersवापरा.
ब्राउझर एक्सटेंशन्स वापरून CORS बायपास करण्याचा प्रयत्न करणे थांबवा. त्याऐवजी तुमच्या सर्व्हरचे कॉन्फिगरेशन सुधारा.
Source: https://dev.to/onsen/why-developers-dont-understand-cors-and-how-to-fix-it-19d5
Optional learning community: https://t.me/GyaanSetuAi