ડેવલપર્સ CORS કેમ નથી સમજતા

CORS એ વેબ ડેવલપમેન્ટમાં સૌથી વધુ ગેરસમજવામાં આવતા સુરક્ષા સાધનોમાંનું એક છે. ઘણા ડેવલપર્સને લાગે છે કે તે તેમના સર્વરનું રક્ષણ કરે છે. તે કરતું નથી.

CORS વપરાશકર્તાનું રક્ષણ કરે છે.

બ્રાઉઝર Same-Origin Policy (SOP) લાગુ કરે છે. આ પોલિસી કોઈ ખતરનાક સાઇટને તમારા વતી બીજી સાઇટ પર વિનંતીઓ (requests) મોકલતા અટકાવે છે. CORS એ માત્ર એક રીત છે જેના દ્વારા સર્વર બ્રાઉઝરને ચોક્કસ સાઇટ્સ માટે તે નિયમમાં છૂટછાટ આપવા કહે છે.

જો તમારી વિનંતી Postman માં કામ કરે છે પરંતુ બ્રાઉઝરમાં નિષ્ફળ જાય છે, તો તમારી પાસે CORS ની સમસ્યા છે. Postman બ્રાઉઝર નથી, તેથી તે આ નિયમો લાગુ કરતું નથી.

Common mistakes you must avoid:

  • CORS ને તમારી એકમાત્ર સુરક્ષા તરીકે વાપરવું. CORS એ authentication નથી. તમારે હજુ પણ tokens, passwords, અને rate limiting ની જરૂર પડશે.
  • વાઇલ્ડકાર્ડનો ફાંસો. જો તમારે cookies અથવા credentials મોકલવાની જરૂર હોય, તો તમે Access-Control-Allow-Origin: * નો ઉપયોગ કરી શકતા નથી. તમારે ચોક્કસ ડોમેનનું લિસ્ટ આપવું પડશે.
  • preflight requests ને અવગણવા. બ્રાઉઝર ઘણા API કોલ્સ પહેલા આપમેળે OPTIONS request મોકલે છે. જો તમારું સર્વર OPTIONS ને બ્લોક કરે છે, તો તમારી વાસ્તવિક વિનંતી નિષ્ફળ જશે.
  • error headers નો અભાવ. જો તમારું API CORS headers વગર 401 અથવા 500 error રિટર્ન કરે છે, તો બ્રાઉઝર અસલી ભૂલ છુપાવી દે છે. તમને ફક્ત એક સામાન્ય CORS મેસેજ જ દેખાશે.

How to fix it:

  • OPTIONS requests હેન્ડલ કરો. ખાતરી કરો કે તમારું સર્વર preflight કોલ્સ માટે 200 અથવા 204 status રિટર્ન કરે છે.
  • middleware નો ઉપયોગ કરો. CORS ને middleware લેવલ પર કન્ફિગર કરો જેથી તે ભૂલો સહિતના તમામ જવાબોને આવરી લે છે તેની ખાતરી થાય.
  • Vary header સેટ કરો. જો તમે ગતિશીલ રીતે (dynamically) અનેક origins ને મંજૂરી આપો છો, તો તમારે તમારા પ્રતિસાદમાં Vary: Origin ઉમેરવું આવશ્યક છે.
  • સાચા સાધનોનો ઉપયોગ કરો. Node.js માટે, cors package નો ઉપયોગ કરો. 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