ഡെവലപ്പർമാർക്ക് എന്തുകൊണ്ടാണ് CORS മനസ്സിലാകാത്തത്?
വെബ് ഡെവലപ്മെന്റിൽ ഏറ്റവും കൂടുതൽ തെറ്റിദ്ധരിക്കപ്പെടുന്ന സുരക്ഷാ സംവിധാനങ്ങളിൽ ഒന്നാണ് CORS. ഇത് തങ്ങളുടെ സെർവറിനെ സംരക്ഷിക്കുന്നു എന്നാണ് പല ഡെവലപ്പർമാരും കരുതുന്നത്. എന്നാൽ അത് ശരിയല്ല.
CORS സംരക്ഷിക്കുന്നത് ഉപയോക്താവിനെയാണ്.
ബ്രൗസർ Same-Origin Policy (SOP) നടപ്പിലാക്കുന്നു. ഒരു ദുരുദ്ദേശ്യ സൈറ്റിന് (malicious site) നിങ്ങളുടെ പേരിൽ മറ്റൊരു സൈറ്റിലേക്ക് റിക്വസ്റ്റുകൾ അയക്കുന്നത് ഈ പോളിസി തടയുന്നു. ചില പ്രത്യേക സൈറ്റുകൾക്കായി ആ നിയമത്തിൽ ഇളവ് നൽകാൻ സെർവർ ബ്രൗസറിനോട് പറയുന്ന രീതി മാത്രമാണ് CORS.
നിങ്ങളുടെ റിക്വസ്റ്റ് Postman-ൽ പ്രവർത്തിക്കുകയും എന്നാൽ ബ്രൗസറിൽ പരാജയപ്പെടുകയും ചെയ്യുന്നുണ്ടെങ്കിൽ, അവിടെ ഒരു CORS പ്രശ്നമുണ്ട്. Postman ഒരു ബ്രൗസർ അല്ല, അതിനാൽ അത് ഈ നിയമങ്ങൾ പാലിക്കണമെന്നില്ല.
നിങ്ങൾ ഒഴിവാക്കേണ്ട പൊതുവായ തെറ്റുകൾ:
- CORS-നെ മാത്രം സുരക്ഷാ മാർഗമായി ഉപയോഗിക്കുന്നത്. CORS എന്നത് ഒരു ഓതന്റിക്കേഷൻ (authentication) സംവിധാനമല്ല. നിങ്ങൾക്ക് ഇപ്പോഴും ടോക്കണുകൾ (tokens), പാസ്വേഡുകൾ, റേറ്റ് ലിമിറ്റിംഗ് (rate limiting) എന്നിവ ആവശ്യമാണ്.
- വൈൽഡ്കാർഡ് കെണി (The wildcard trap). നിങ്ങൾക്ക് കുക്കികളോ (cookies) ക്രെഡൻഷ്യലുകളോ (credentials) അയക്കേണ്ടതുണ്ടെങ്കിൽ
Access-Control-Allow-Origin: *ഉപയോഗിക്കാൻ കഴിയില്ല. പകരം കൃത്യമായ ഡൊമെയ്ൻ തന്നെ നൽകണം. - പ്രീഫ്ലൈറ്റ് (preflight) റിക്വസ്റ്റുകൾ അവഗണിക്കുന്നത്. പല API കോളുകൾക്കും മുമ്പ് ബ്രൗസറുകൾ സ്വയമേവ ഒരു OPTIONS റിക്വസ്റ്റ് അയക്കുന്നുണ്ട്. നിങ്ങളുടെ സെർവർ OPTIONS റിക്വസ്റ്റുകൾ ബ്ലോക്ക് ചെയ്യുകയാണെങ്കിൽ, നിങ്ങളുടെ യഥാർത്ഥ റിക്വസ്റ്റ് പരാജയപ്പെടും.
- എറർ ഹെഡറുകൾ (error headers) വിട്ടുപോവുന്നത്. നിങ്ങളുടെ API, CORS ഹെഡറുകൾ ഇല്ലാതെ ഒരു 401 അല്ലെങ്കിൽ 500 എറർ നൽകുകയാണെങ്കിൽ, ബ്രൗസർ യഥാർത്ഥ എറർ മറച്ചുവെക്കും. നിങ്ങൾക്ക് ഒരു സാധാരണ CORS മെസ്സേജ് മാത്രമേ കാണാൻ കഴിയൂ.
ഇത് എങ്ങനെ പരിഹരിക്കാം:
- OPTIONS റിക്വസ്റ്റുകൾ കൈകാര്യം ചെയ്യുക. പ്രീഫ്ലൈറ്റ് കോളുകൾക്കായി നിങ്ങളുടെ സെർവർ 200 അല്ലെങ്കിൽ 204 സ്റ്റാറ്റസ് നൽകുന്നുണ്ടെന്ന് ഉറപ്പാക്കുക.
- മിഡിൽവെയർ (middleware) ഉപയോഗിക്കുക. എററുകൾ ഉൾപ്പെടെയുള്ള എല്ലാ റെസ്പോൺസുകളും ഇതിൽ ഉൾപ്പെടുന്നുണ്ടെന്ന് ഉറപ്പാക്കാൻ മിഡിൽവെയർ തലത്തിൽ CORS കോൺഫിഗർ ചെയ്യുക.
- Vary ഹെഡർ സെറ്റ് ചെയ്യുക. നിങ്ങൾ ഡൈനാമിക് ആയി ഒന്നിലധികം ഒറിജിനുകൾ അനുവദിക്കുന്നുണ്ടെങ്കിൽ, നിങ്ങളുടെ റെസ്പോൺസിൽ
Vary: Originചേർക്കണം. - ശരിയായ ടൂളുകൾ ഉപയോഗിക്കുക. Node.js-ന്
corsപാക്കേജ് ഉപയോഗിക്കുക. Django-യ്ക്ക്django-cors-headersഉപയോഗിക്കുക.
ബ്രൗസർ എക്സ്റ്റൻഷനുകൾ ഉപയോഗിച്ച് CORS ബൈപാസ് ചെയ്യാൻ ശ്രമിക്കുന്നത് നിർത്തുക. പകരം നിങ്ങളുടെ സെർവർ കോൺഫിഗറേഷൻ ശരിയാക്കുക.
സ്രോതസ്സ്: https://dev.to/onsen/why-developers-dont-understand-cors-and-how-to-fix-it-19d5
ഓപ്ഷണൽ ലേണിംഗ് കമ്മ്യൂണിറ്റി: https://t.me/GyaanSetuAi