ڈویلپرز CORS کیوں نہیں سمجھتے
CORS ویب ڈویلپمنٹ میں سب سے زیادہ غلط سمجھی جانے والی سیکیورٹی ٹولز میں سے ایک ہے۔ بہت سے ڈویلپرز سمجھتے ہیں کہ یہ ان کے سرور کی حفاظت کرتا ہے۔ ایسا نہیں ہے۔
CORS صارف (user) کی حفاظت کرتا ہے۔
براؤزر Same-Origin Policy (SOP) پر عمل درآمد کرتا ہے۔ یہ پالیسی کسی بھی بدنیتی پر مبنی سائٹ کو آپ کی طرف سے دوسری سائٹ کو ریکویسٹ بھیجنے سے روکتی ہے۔ CORS محض وہ طریقہ ہے جس کے ذریعے ایک سرور براؤزر کو مخصوص سائٹس کے لیے اس اصول میں نرمی کرنے کا کہتا ہے۔
اگر آپ کی ریکویسٹ Postman میں کام کرتی ہے لیکن براؤزر میں ناکام ہو جاتی ہے، تو آپ کو CORS کا مسئلہ درپیش ہے۔ Postman براؤزر نہیں ہے، اس لیے یہ ان اصولوں پر عمل درآمد نہیں کرتا۔
عام غلطیاں جن سے آپ کو بچنا چاہیے:
- CORS کو اپنی واحد سیکیورٹی کے طور پر استعمال کرنا۔ CORS آتھنٹیکیشن (authentication) نہیں ہے۔ آپ کو اب بھی ٹوکنز (tokens)، پاس ورڈز اور ریٹ لمٹنگ (rate limiting) کی ضرورت ہوتی ہے۔
- وائلڈ کارڈ (wildcard) کا جال۔ اگر آپ کو کوکیز (cookies) یا کریڈنشلز (credentials) بھیجنے کی ضرورت ہے تو آپ
Access-Control-Allow-Origin: *استعمال نہیں کر سکتے۔ آپ کو بالکل درست ڈومین (domain) درج کرنا ہوگا۔ - پری فلائٹ (preflight) ریکویسٹس کو نظر انداز کرنا۔ براؤزرز بہت سی API کالز سے پہلے خودکار طور پر ایک OPTIONS ریکویسٹ بھیجتے ہیں۔ اگر آپ کا سرور OPTIONS کو بلاک کرتا ہے، تو آپ کی اصل ریکویسٹ ناکام ہو جائے گی۔
- ایرر ہیڈرز (error headers) کا نہ ہونا۔ اگر آپ کی API بغیر CORS ہیڈرز کے 401 یا 500 ایرر واپس کرتی ہے، تو براؤزر اصل ایرر کو چھپا دیتا ہے۔ آپ کو صرف ایک عام سا CORS پیغام نظر آئے گا۔
اسے کیسے ٹھیک کریں:
- OPTIONS ریکویسٹس کو ہینڈل کریں۔ اس بات کو یقینی بنائیں کہ آپ کا سرور پری فلائٹ کالز کے لیے 200 یا 204 اسٹیٹس واپس کرتا ہے۔
- مڈل ویئر (middleware) کا استعمال کریں۔ CORS کو مڈل ویئر لیول پر کنفیگر کریں تاکہ یہ تمام رسپانسز، بشمول ایررز، کو کور کر سکے۔
- Vary ہیڈر سیٹ کریں۔ اگر آپ متحرک طور پر (dynamically) متعدد اوریجنز (origins) کی اجازت دیتے ہیں، تو آپ کو اپنے رسپانس میں
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
اختیاری لرننگ کمیونٹی: https://t.me/GyaanSetuAi