کراس اوریجن ریسورس شیئرنگ (CORS) کو ورلڈ وائڈ ویب کنسورشیم (W3C) نے 2006 میں متعارف کرایا تھا تاکہ ویب سرورز کو کسی دوسرے اصل (ڈومین، اسکیم، یا پورٹ) کی وضاحت کرنے کا طریقہ فراہم کیا جا سکے جسے سرور کے وسائل تک رسائی کی اجازت ہے۔ ایک ہی اصل کی پالیسی۔ یہ ویب سیکیورٹی میں ایک اہم ارتقاء تھا، جس نے سخت حفاظتی پروٹوکول کو برقرار رکھتے ہوئے مزید انٹرایکٹو اور مربوط ویب ایپلیکیشنز کو فعال کیا۔
جدید ویب ڈویلپمنٹ کے لیے CORS (کراس اوریجن ریسورس شیئرنگ) کے میکانکس کو سمجھنا بہت ضروری ہے۔ یہ سیکشن اس بات پر روشنی ڈالتا ہے کہ کس طرح CORS ویب سیکیورٹی کو بڑھاتا ہے، سادہ اور پری فلائٹ درخواستوں کے درمیان فرق کرتا ہے، اور CORS ہیڈر کی اہمیت کی وضاحت کرتا ہے۔
کراس اوریجن ریسورس شیئرنگ کیا ہے؟
CORS (کراس اوریجن ریسورس شیئرنگ) ایک ایسا طریقہ کار ہے جو HTTP ہیڈرز کا استعمال براؤزر کو بتانے کے لیے کرتا ہے کہ وہ ایک اصل (ڈومین) پر چلنے والی ویب ایپلیکیشن کو مختلف اصل میں سرور سے منتخب وسائل تک رسائی کی اجازت دے سکے۔ یہ ویب سیکیورٹی میں ایک اہم پیشرفت ہے، کیونکہ یہ مختلف ویب سروسز کے درمیان مزید کھلے رابطے کی اجازت دیتا ہے جبکہ بدستور نقصان دہ حملوں سے بچاتا ہے۔
کس طرح CORS ویب سیکیورٹی کو بڑھاتا ہے: ایک تکنیکی بصیرت
CORS ایک حفاظتی خصوصیت ہے جو ویب ایپلیکیشنز کو ویب سائٹ سے مختلف اصل پر میزبان سرورز سے درخواستیں کرنے کی اجازت دیتی ہے۔
CORS سے پہلے، ایک ہی اصل کی پالیسی نے ویب ایپلیکیشنز کو صرف اسی ڈومین پر درخواستیں کرنے تک محدود کر دیا تھا جس میں سائٹ ہے۔ اگرچہ یہ پالیسی ایک اہم حفاظتی اقدام ہے، بدنیتی پر مبنی سائٹس کو حساس ڈیٹا تک رسائی سے روکتی ہے، یہ جدید ویب ایپلیکیشنز کے لیے ضروری جائز کراس اوریجن تعاملات کو بھی محدود کرتی ہے۔
CORS سرورز کو مخصوص ہیڈر شامل کرنے کی اجازت دیتا ہے جو براؤزر کو بتاتے ہیں کہ وسائل تک رسائی کی اجازت کون سی ہے۔ یہاں ایک بنیادی مثال ہے کہ کس طرح CORS سیکیورٹی کو بڑھاتا ہے:
- پر ایک ویب ایپلیکیشن
https://example.com
سے درخواست کرنے کی کوشش کرتا ہے۔https://api.example.org/data
. - براؤزر خود بخود CORS کی درخواست بھیجتا ہے۔
https://api.example.org/data
. - پر سرور
https://api.example.org
اس بات کا تعین کرنے کے لیے اپنی CORS پالیسی چیک کرتا ہے۔https://example.com
اجازت ہے. - اگر
https://example.com
کی اجازت ہے، سرور مناسب CORS ہیڈر کے ساتھ جواب دیتا ہے، جیسےAccess-Control-Allow-Origin: https://example.com
، جس سے یہ ظاہر ہوتا ہے کہ براؤزر کو ویب ایپلیکیشن کو وسائل تک رسائی کی اجازت دینی چاہیے۔
CORS کے بغیر، ایک ہی اصل کی پالیسی درخواست کو روک دے گی، لیکن CORS کے ساتھ، سرور قابل اعتماد اصل سے کراس اوریجن درخواستوں کو محفوظ طریقے سے اجازت دے سکتا ہے۔
سادہ بمقابلہ پری فلائٹ درخواستیں: فرق کو سمجھنا
CORS درخواستوں کو دو اقسام میں درجہ بندی کیا گیا ہے: سادہ درخواستیں اور پہلے سے تیار کردہ درخواستیں۔ ان کے درمیان فرق استعمال شدہ طریقہ اور درخواست کے ساتھ بھیجے گئے ہیڈر پر مبنی ہے۔
- سادہ درخواستیں۔: یہ وہ درخواستیں ہیں جو CORS کے بیان کردہ کچھ معیارات پر پورا اترتی ہیں۔ ایک سادہ درخواست GET، POST، یا HEAD طریقہ استعمال کر سکتی ہے۔ مزید برآں، اسے صرف ایسے ہیڈرز کا استعمال کرنا چاہیے جو محفوظ اور غیر صارف کے لیے متعین سمجھے جاتے ہیں، جیسے
Accept
,Accept-Language
,Content-Language
، اورContent-Type
کی اقدار کے ساتھapplication/x-www-form-urlencoded
,multipart/form-data
، یاtext/plain
. یہاں ایک سادہ درخواست کی ایک مثال ہے:
fetch('https://api.example.org/data', {
method: 'GET',
headers: {
'Accept': 'application/json',
}
});
- پہلے سے تیار کردہ درخواستیں۔: یہ درخواستیں سادہ درخواستوں کے معیار پر پورا نہیں اترتی ہیں اور اصل درخواست بھیجے جانے سے پہلے OPTIONS طریقہ کے ساتھ ابتدائی "پری فلائٹ" درخواست کی ضرورت ہوتی ہے۔ یہ پری فلائٹ چیک کرتی ہے کہ آیا اصل درخواست بھیجنے کے لیے محفوظ ہے، ہدف وسائل کی CORS پالیسی کی بنیاد پر۔ پہلے سے تیار کردہ درخواستوں کا استعمال اس وقت کیا جاتا ہے جب طریقہ GET، POST، یا HEAD کے علاوہ ہو، یا جب حسب ضرورت ہیڈر استعمال کیے جائیں۔ یہاں ایک مثال ہے:
fetch('https://api.example.org/data', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Custom-Header': 'value'
},
body: JSON.stringify({key: 'value'})
});
اس صورت میں، براؤزر پہلے آپشنز کی درخواست بھیجتا ہے۔ https://api.example.org/data
اس بات کا تعین کرنے کے لیے کہ آیا POST درخواست a کے ساتھ Content-Type
کی application/json
اور ایک حسب ضرورت ہیڈر X-Custom-Header
اجازت ہے.
CORS ہیڈرز نے وضاحت کی: وہ کیا ہیں اور وہ کیسے کام کرتے ہیں۔
CORS سرور اور براؤزر کے درمیان بات چیت کرنے کے لیے مخصوص HTTP ہیڈر پر انحصار کرتا ہے۔ یہ ہیڈر اس بات کا تعین کرتے ہیں کہ آیا براؤزر کو بلاک کرنا چاہیے یا درخواست کو آگے بڑھنے کی اجازت دینا چاہیے۔ یہاں اہم CORS ہیڈر ہیں:
Access-Control-Allow-Origin
: یہ ہیڈر بتاتا ہے کہ کون سی اصلیت کو وسائل تک رسائی کی اجازت ہے۔ اسے کسی مخصوص اصل پر سیٹ کیا جا سکتا ہے، جیسےhttps://example.com
، یا*
تمام ماخذ کی اجازت دینے کے لیے (اگرچہ استعمال کر رہے ہیں۔*
اسناد کے ساتھ اجازت نہیں ہے)۔Access-Control-Allow-Methods
: یہ ہیڈر پری فلائٹ کی درخواست کے جواب میں استعمال کیا جاتا ہے تاکہ اس بات کی نشاندہی کی جا سکے کہ وسائل تک رسائی کے دوران کون سے HTTP طریقوں کی اجازت ہے۔Access-Control-Allow-Headers
: پری فلائٹ کی درخواست کے جواب میں، یہ ہیڈر بتاتا ہے کہ اصل درخواست میں کون سے ہیڈر استعمال کیے جا سکتے ہیں۔Access-Control-Expose-Headers
: یہ ہیڈر سرورز کو ایسے ہیڈروں کو وائٹ لسٹ کرنے کی اجازت دیتا ہے جن تک براؤزر کو رسائی کی اجازت ہے۔Access-Control-Allow-Credentials
: یہ ہیڈر اس بات کی نشاندہی کرتا ہے کہ جب اسناد کا جھنڈا درست ہے تو درخواست کا جواب ظاہر کیا جا سکتا ہے یا نہیں۔ اس پر سیٹ ہونا ضروری ہے۔true
اگر کوکیز یا تصدیق کی تفصیلات درخواست میں شامل ہیں۔Access-Control-Max-Age
: یہ ہیڈر بتاتا ہے کہ پری فلائٹ کی درخواست کے نتائج کب تک کیش کیے جا سکتے ہیں۔
ضروری کراس اوریجن درخواستوں کی اجازت دیتے ہوئے ویب ایپلیکیشنز کو محفوظ بنانے کے لیے CORS ہیڈرز کو سمجھنا اور اس پر عمل درآمد ضروری ہے۔ ان ہیڈرز کو ترتیب دے کر، ڈویلپر اس بات کو ٹھیک کر سکتے ہیں کہ کون سی کراس اوریجن درخواستوں کی اجازت ہے، اس بات کو یقینی بناتے ہوئے کہ صرف قابل اعتماد ذرائع ہی اپنے ویب وسائل تک رسائی حاصل کر سکتے ہیں۔
CORS کو نافذ کرنا
کراس اوریجن ریسورس شیئرنگ (CORS) کو لاگو کرنا جدید ویب ایپلیکیشنز کے لیے ضروری ہے جو مختلف اصلیت کے وسائل کے ساتھ تعامل کرتے ہیں۔ یہ سیکشن آپ کی ایپلی کیشنز میں CORS کو فعال کرنے، عام CORS کی غلطیوں کو ڈیبگ کرنے، اور ویب ڈویلپرز کے لیے بہترین طریقوں کا خاکہ پیش کرتا ہے۔
اپنی درخواستوں میں CORS کو فعال کرنا: ایک مرحلہ وار گائیڈ
CORS کو فعال کرنے میں درخواستوں کے جواب میں مناسب CORS ہیڈر بھیجنے کے لیے آپ کے سرور کو ترتیب دینا شامل ہے۔ یہ عمل سرور ٹیکنالوجی کے لحاظ سے مختلف ہوتا ہے (مثال کے طور پر، Apache، Nginx، Node.js) جو آپ استعمال کر رہے ہیں۔ مختلف سرور ماحول میں CORS کو فعال کرنے کا طریقہ یہاں ہے:
- اپاچی: اپاچی سرورز کے لیے، آپ درج ذیل ہدایات کو شامل کرکے CORS کو فعال کرسکتے ہیں۔
.htaccess
فائل یا سرور کنفیگریشن فائل:
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"
Header set Access-Control-Allow-Headers "Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With"
</IfModule>
یہ ترتیب تمام اصلیت کی اجازت دیتی ہے (*
) مخصوص طریقوں اور ہیڈرز کا استعمال کرتے ہوئے درخواستیں کرنا۔ کو ایڈجسٹ کریں۔ Access-Control-Allow-Origin
قابل اعتماد ماخذ تک رسائی کو محدود کرنے کی قدر۔
- Nginx: Nginx میں، CORS کو آپ کے سرور بلاک میں درج ذیل شامل کر کے فعال کیا جا سکتا ہے۔
location / {
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, DELETE, PUT';
add_header 'Access-Control-Allow-Headers' 'Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With';
add_header 'Content-Length' '0';
add_header 'Content-Type' 'text/plain charset=UTF-8';
return 204;
}
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, DELETE, PUT';
add_header 'Access-Control-Allow-Headers' 'Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With';
}
- Node.js (ایکسپریس): ایکسپریس کا استعمال کرتے ہوئے Node.js ایپلی کیشنز کے لیے، CORS کو آسانی سے استعمال کر کے فعال کیا جا سکتا ہے۔
cors
مڈل ویئر:
const express = require('express');
const cors = require('cors');
const app = express();
app.use(cors({
origin: '*', // Adjust this to your specific origin
methods: ['GET', 'POST', 'OPTIONS', 'DELETE', 'PUT'],
allowedHeaders: ['Content-Type', 'Access-Control-Allow-Headers', 'Authorization', 'X-Requested-With'],
}));
app.get('/data', (req, res) => {
res.json({ message: 'This is CORS-enabled for all origins!' });
});
app.listen(3000, () => {
console.log('Server running on port 3000');
});
عام CORS کی خرابیاں ڈیبگ کرنا: ٹپس اور ٹرکس
CORS کی خرابیاں عام طور پر اس وقت ہوتی ہیں جب براؤزر سرور کی CORS پالیسی کی وجہ سے کسی درخواست کو روکتا ہے۔ عام غلطیوں میں گمشدگی کے بارے میں پیغامات شامل ہیں۔ Access-Control-Allow-Origin
ہیڈر یا طریقوں کی اجازت نہیں ہے۔ ان غلطیوں کو ڈیبگ کرنے کے لیے:
- براؤزر ڈیو ٹولز استعمال کریں۔: جدید براؤزر کنسول میں خرابی کے تفصیلی پیغامات فراہم کرتے ہیں۔ یہ پیغامات اکثر اس بات کی نشاندہی کرتے ہیں کہ کیا غائب ہے یا غلط کنفیگر کیا گیا ہے۔
- سرور کنفیگریشن چیک کریں۔: یقینی بنائیں کہ آپ کا سرور ضروری CORS ہیڈر بھیجنے کے لیے درست طریقے سے ترتیب دیا گیا ہے۔ غائب ہیڈر یا غلط اقدار عام مسائل ہیں۔
- ٹولز کے ساتھ ٹیسٹ کریں۔: پوسٹ مین یا سی آر ایل جیسے ٹولز مختلف ماخذ سے درخواستوں کی تقلید کر سکتے ہیں اور یہ شناخت کرنے میں مدد کر سکتے ہیں کہ آیا سرور درست CORS ہیڈر کے ساتھ جواب دیتا ہے۔
- CORS پالیسی کا جائزہ لیں۔: یقینی بنائیں کہ سرور پر آپ کی CORS پالیسی آپ کی ویب ایپلیکیشن کی ضروریات سے میل کھاتی ہے۔ مثال کے طور پر، اگر آپ کی درخواست کو اسناد (کوکیز، HTTP توثیق) بھیجنے کی ضرورت ہے، تو یقینی بنائیں
Access-Control-Allow-Credentials
پر مقرر ہےtrue
اورAccess-Control-Allow-Origin
پر سیٹ نہیں ہے۔*
.
ویب ڈویلپرز کے لیے CORS کنفیگریشن کے بہترین طریقے
CORS کو محفوظ طریقے سے اور مؤثر طریقے سے نافذ کرنے کے لیے بہترین طریقوں کی پابندی کی ضرورت ہے:
- عین مطابق اصلیت کی وضاحت کریں۔: استعمال کرنے کے بجائے
*
کے لیےAccess-Control-Allow-Origin
, وہ صحیح ماخذ بیان کریں جنہیں آپ کے وسائل تک رسائی کی اجازت ہونی چاہیے۔ یہ ناپسندیدہ کراس اوریجن درخواستوں کی نمائش کو محدود کرتا ہے۔ - اسناد کو احتیاط سے استعمال کریں۔: اگر آپ کی درخواست اسناد کا استعمال کرتی ہے تو یقینی بنائیں
Access-Control-Allow-Credentials
پر مقرر ہےtrue
, اور اس کے بجائے عین ماخذ کی وضاحت کریں۔*
. یاد رکھیں کہ اسناد میں کوکیز، HTTP تصدیق، اور کلائنٹ سائڈ SSL سرٹیفکیٹ شامل ہیں۔ - بے نقاب ہیڈرز کو محدود کریں۔: صرف اس کے ذریعے ضروری ہیڈرز کو ظاہر کریں۔
Access-Control-Expose-Headers
. بہت زیادہ ہیڈرز کو ظاہر کرنا نادانستہ طور پر حساس معلومات کو لیک کر سکتا ہے۔ - پری فلائٹ کیشے کی مدت کی توثیق کریں۔: استعمال کریں۔
Access-Control-Max-Age
پری فلائٹ کے جوابات کو کیش کرنے کے لیے، پری فلائٹ کی درخواستوں کی تعداد کو کم کرنا۔ تاہم، یقینی بنائیں کہ دورانیہ مماثل ہے کہ آپ کی CORS پالیسی کتنی بار تبدیل ہو سکتی ہے۔ - ڈائنامک CORS پالیسیوں کو نافذ کریں۔: مزید پیچیدہ ایپلی کیشنز کے لیے، ڈائنامک CORS پالیسیوں کو لاگو کرنے پر غور کریں جو ایڈجسٹ کرتی ہیں۔
Access-Control-Allow-Origin
درخواست کی اصل کی بنیاد پر۔ یہ سرور پر پروگرام کے مطابق کیا جا سکتا ہے۔ - CORS پالیسیوں کا باقاعدگی سے جائزہ لیں۔: جیسے جیسے آپ کی ویب ایپلیکیشن تیار ہوتی ہے، باقاعدگی سے اپنی CORS پالیسیوں کا جائزہ لیں اور اپ ڈیٹ کریں تاکہ یہ یقینی بنایا جا سکے کہ وہ اب بھی آپ کی سیکیورٹی اور فعالیت کے تقاضوں کو پورا کرتی ہیں۔
ان رہنما خطوط پر عمل کرکے اور CORS کو ترتیب دینے اور ڈیبگ کرنے کے طریقے کو سمجھ کر، ڈویلپرز اپنی ویب ایپلیکیشنز کو محفوظ طریقے سے اور مؤثر طریقے سے اصل میں مواصلت کو یقینی بنا سکتے ہیں۔
CORS ان ایکشن
کراس اوریجن ریسورس شیئرنگ (CORS) کو نافذ کرنا صرف ایک خصوصیت کو فعال کرنے کے بارے میں نہیں ہے۔ یہ سمجھنے کے بارے میں ہے کہ یہ جدید ویب ایپلیکیشنز کے تناظر میں کیسے کام کرتا ہے۔ یہ سیکشن CORS کی حقیقی دنیا کی مثالیں، CORS پالیسیوں کا انتظام، اور مؤثر نفاذ کے لیے ٹولز اور تکنیکوں کو تلاش کرتا ہے۔
CORS کی حقیقی دنیا کی مثالیں: تھیوری سے پریکٹس تک
CORS ویب ڈویلپمنٹ کا ایک بنیادی حصہ ہے جو وسائل کی مختلف اصلوں میں محفوظ طریقے سے درخواست کرنے کی اجازت دیتا ہے۔ یہاں کچھ حقیقی دنیا کے منظرنامے ہیں جہاں CORS ایک اہم کردار ادا کرتا ہے:
- سنگل پیج ایپلی کیشنز (SPAs) میں API کی کھپت: SPAs اکثر APIs استعمال کرتے ہیں جو مختلف ڈومینز پر ہوسٹ ہوتے ہیں۔ مثال کے طور پر، ایک React ایپلی کیشن جس سے پیش کی گئی ہے۔
https://myapp.com
سے صارف کا ڈیٹا لانے کی ضرورت پڑ سکتی ہے۔https://api.userdata.com
. CORS کے بغیر، یہ کراس اوریجن درخواست براؤزر کے ذریعے بلاک کر دی جائے گی۔ مناسب CORS ہیڈر ترتیب دے کر (Access-Control-Allow-Origin: https://myapp.com
) API سرور پر، SPA محفوظ طریقے سے مطلوبہ ڈیٹا کی درخواست کر سکتا ہے۔
// Example fetch request in an SPA
fetch("https://api.userdata.com/user", {
method: "GET",
headers: {
"Content-Type": "application/json",
},
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error fetching user data:', error));
- مواد کی ترسیل کے نیٹ ورکس (CDNs): CDNs دنیا بھر میں مختلف مقامات سے جامد اثاثے (تصاویر، اسکرپٹ، اسٹائل شیٹس) پیش کرتے ہیں۔ جب آپ کی ویب ایپلیکیشن کی میزبانی کی جاتی ہے۔
https://example.com
سے ایک تصویر کی درخواست کرتا ہے۔https://cdn.example.com
, CORS اس بات کو یقینی بناتا ہے کہ جامد اثاثوں کے لیے یہ کراس اوریجن درخواستیں محفوظ طریقے سے نمٹائی جائیں۔ - تھرڈ پارٹی وجیٹس اور انٹیگریشنز: ویب سائٹس اکثر فریق ثالث کے ویجٹس (مثلاً چیٹ بوٹس، سوشل میڈیا فیڈز) کو مربوط کرتی ہیں جن کے لیے بیرونی سرورز سے وسائل تک رسائی کی ضرورت ہوتی ہے۔ CORS ان ویجٹس کو بغیر کسی سمجھوتہ کے سیکورٹی سے سمجھوتہ کیے صارف کے تجربے کو بڑھاتے ہوئے مختلف ماخذوں میں بغیر کسی رکاوٹ کے کام کرنے کے قابل بناتا ہے۔
CORS پالیسیوں کا انتظام: مؤثر نفاذ کے لیے ٹولز اور تکنیک
CORS پالیسیوں کو مؤثر طریقے سے منظم کرنے کے لیے آپ کے اختیار میں موجود ٹولز اور تکنیکوں کو سمجھنے کی ضرورت ہے:
- سرور کنفیگریشن: CORS پالیسیوں کے انتظام میں پہلا قدم آپ کے ویب سرور کو ترتیب دینا ہے۔ اس میں آپ کی درخواست کی ضروریات کی بنیاد پر ضروری CORS ہیڈر ترتیب دینا شامل ہے۔ زیادہ تر ویب سرورز (Apache, Nginx, IIS) آپ کو ان ہیڈرز کو ان کی کنفیگریشن فائلوں میں یا .htaccess (Apache کے لیے) کے ذریعے بتانے کی اجازت دیتے ہیں۔
- ویب فریم ورک کے لیے مڈل ویئر: اگر آپ ویب فریم ورک استعمال کر رہے ہیں (Express.js for Node.js، Django for Python) تو بہت سے مڈل ویئر پیکجز پیش کرتے ہیں جو CORS پالیسی کے انتظام کو آسان بناتے ہیں۔ مثال کے طور پر، the
cors
ایکسپریس کے لیے پیکیج آپ کو براہ راست اپنے ایپلیکیشن کوڈ میں CORS پالیسیوں کی وضاحت کرنے کی اجازت دیتا ہے۔
// Example using the cors middleware in an Express.js application
const cors = require('cors');
const express = require('express');
const app = express();
// Define CORS options
const corsOptions = {
origin: 'https://example.com',
optionsSuccessStatus: 200,
};
app.use(cors(corsOptions));
app.get('/data', (req, res) => {
res.json({ message: 'CORS-enabled route' });
});
app.listen(3000, () => console.log('Server running on port 3000'));
- متحرک CORS ہینڈلنگ: ایسی ایپلی کیشنز کے لیے جن کو متعدد بھروسہ مند اصلوں سے درخواستوں کی اجازت دینے کی ضرورت ہے، متحرک CORS ہینڈلنگ کو لاگو کیا جا سکتا ہے۔ اس میں پروگرام کے لحاظ سے ترتیب دینا شامل ہے۔
Access-Control-Allow-Origin
آنے والی درخواست کی اصل پر مبنی ہیڈر۔
// Example of dynamic CORS handling
app.use((req, res, next) => {
const allowedOrigins = ['https://example.com', 'https://api.example.com'];
const origin = req.headers.origin;
if (allowedOrigins.includes(origin)) {
res.setHeader('Access-Control-Allow-Origin', origin);
}
next();
});
CORS پالیسیوں کی جانچ اور ڈیبگنگ کے لیے ٹولز
- براؤزر ڈویلپر ٹولز: براؤزر ڈویلپر ٹولز میں موجود نیٹ ورک ٹیب CORS کی غلطیوں کا معائنہ کرنے اور یہ سمجھنے کے لیے کہ کس طرح CORS ہیڈر اصل وقت میں بھیجے اور وصول کیے جا رہے ہیں۔
- آن لائن ٹولز: جیسے اوزار CORS ٹیسٹر اور ڈاکیا آپ کو مختلف اصلوں سے اپنے سرور کو درخواستیں بھیج کر اور جواب کا معائنہ کرکے CORS پالیسیوں کی جانچ کرنے کی اجازت دیتا ہے۔
- کمانڈ لائن ٹولز:
curl
کمانڈ لائن سے CORS پالیسیوں کو جانچنے کا ایک طاقتور ٹول ہے۔ اس کا استعمال مختلف اصلوں سے درخواستوں کی تقلید کرنے اور سرور کے جواب میں CORS ہیڈرز کا معائنہ کرنے کے لیے کیا جا سکتا ہے۔
# Example curl command to test CORS
curl -H "Origin: https://example.com" \
-I https://api.example.com/data
ان حقیقی دنیا کی ایپلی کیشنز اور انتظامی حکمت عملیوں کو سمجھ کر، ڈویلپرز یقینی بنا سکتے ہیں کہ ان کی ویب ایپلیکیشنز تمام وسائل کے ساتھ محفوظ طریقے سے تعامل کریں، CORS کو اس کی پوری صلاحیت کا فائدہ دے کر۔
چاہے یہ SPAs میں کراس اوریجن API کی درخواستوں کو فعال کرنا ہو، CDNs کے ذریعے اثاثوں کو پیش کرنا ہو، یا فریق ثالث وجیٹس کو مربوط کرنا ہو، CORS جدید ویب ایکو سسٹم کا ایک لازمی حصہ ہے جس کا صحیح طریقے سے انتظام ہونے پر، سیکورٹی اور فعالیت دونوں فراہم کرتا ہے۔
CORS کے حفاظتی مضمرات
کراس اوریجن ریسورس شیئرنگ (CORS) کا نفاذ ویب ایپلیکیشنز کے لیے اہم حفاظتی مضمرات رکھتا ہے۔ اگرچہ CORS ویب ایپلیکیشنز کو مختلف اصلوں سے وسائل کی درخواست کرنے کے قابل بناتا ہے، لیکن اگر مناسب طریقے سے ترتیب نہ دی گئی ہو تو یہ ممکنہ خطرات کا بھی تعارف کراتی ہے۔
یہ سیکشن CORS کے حفاظتی پہلوؤں پر روشنی ڈالتا ہے، جس میں کراس سائٹ اسکرپٹنگ (XSS) حملوں کی تخفیف اور CORS کی سخت پالیسیوں کی اہمیت کو اجاگر کیا گیا ہے۔
CORS اور ویب سیکیورٹی: کراس سائٹ اسکرپٹنگ (XSS) حملوں کو کم کرنا
کراس سائٹ اسکرپٹنگ (XSS) حملے حملہ آوروں کو بصورت دیگر بے نظیر اور قابل اعتماد ویب سائٹس کے مواد میں بدنیتی پر مبنی اسکرپٹ داخل کرنے کی اجازت دیتے ہیں۔
یہ حملے اس وقت ہوتے ہیں جب کسی ایپلیکیشن میں کسی ویب صفحہ میں غیر بھروسہ مند ڈیٹا شامل ہوتا ہے بغیر مناسب توثیق یا فرار کے، حملہ آوروں کو متاثرہ کے براؤزر سیاق و سباق میں اسکرپٹس پر عمل کرنے کے قابل بناتا ہے۔ CORS XSS حملوں کو کم کرنے میں اس بات کو کنٹرول کر کے بہت اہم ہے کہ آپ کی ویب ایپلیکیشن کے ساتھ کس اصل کو تعامل کرنے کی اجازت ہے۔
ایک ایسے منظر نامے پر غور کریں جہاں ایک ایپلیکیشن صارف کے تیار کردہ مواد کی اجازت دیتی ہے جس میں بدنیتی پر مبنی اسکرپٹس شامل ہو سکتے ہیں۔
مناسب مواد کی صفائی اور سخت CORS پالیسی کے بغیر، یہ ایپلیکیشن XSS حملوں کے لیے ایک ویکٹر بن سکتی ہے۔ CORS براہ راست XSS کو نہیں روکتا ہے لیکن اس بات کو یقینی بنا کر ایک وسیع تر حفاظتی حکمت عملی میں حصہ ڈالتا ہے کہ صرف مخصوص اصل ہی آپ کی درخواست پر درخواستیں کر سکتے ہیں، حملے کی سطح کو کم کر کے۔
مثال کے طور پر، فرض کریں آپ کی درخواست https://safe-app.com
پر میزبانی کردہ API کا استعمال کرتا ہے۔ https://api.safe-app.com
. ترتیب دے کر Access-Control-Allow-Origin
کو ہیڈر https://safe-app.com
، آپ اس بات کو یقینی بناتے ہیں کہ صرف آپ کی درخواست سے شروع ہونے والی درخواستیں API تک رسائی حاصل کر سکتی ہیں۔ یہ پابندی ممکنہ XSS حملوں کو کم کرنے میں مدد کرتی ہے آپ کے API کے ساتھ بات چیت کو قابل اعتماد اصل تک محدود کر کے۔
Access-Control-Allow-Origin: https://safe-app.com
تاہم، XSS اور دیگر قسم کے حملوں کو مؤثر طریقے سے کم کرنے کے لیے، CORS پالیسیوں کو دیگر حفاظتی طریقوں کے ساتھ جوڑنا بہت ضروری ہے، جیسے کہ صارف کے ان پٹ کی تصدیق اور صفائی کرنا۔
سخت CORS پالیسیوں کی اہمیت: اپنی ویب ایپلیکیشنز کی حفاظت کرنا
آپ کی ویب ایپلیکیشنز کو مختلف حفاظتی خطرات سے بچانے کے لیے سخت CORS پالیسیوں کا نفاذ بہت ضروری ہے۔ ایک سست CORS پالیسی، جیسے ترتیب Access-Control-Allow-Origin
کو *
، کسی بھی اصل کو آپ کے سرور سے درخواستیں کرنے کی اجازت دے کر آپ کی درخواست کو ڈیٹا چوری، CSRF حملوں، اور دیگر خطرات سے بے نقاب کر سکتا ہے۔
ایک سخت CORS پالیسی بتاتی ہے کہ کون سے ماخذ، طریقوں اور ہیڈرز کی اجازت ہے۔ یہ خصوصیت اس بات کو یقینی بناتی ہے کہ صرف بھروسہ مند ویب ایپلیکیشنز آپ کے وسائل کے ساتھ تعامل کر سکتی ہیں، سیکیورٹی کی ایک پرت فراہم کرتی ہے جو حساس ڈیٹا اور ایپلیکیشن کی سالمیت کی حفاظت میں مدد کرتی ہے۔
مثال کے طور پر، ایک ایسی ایپلیکیشن پر غور کریں جو کسی مخصوص ڈومین سے رسائی کی اجازت دیتی ہو اور اسناد استعمال کرتی ہو (کوکیز، HTTP توثیق):
Access-Control-Allow-Origin: https://trusted-domain.com
Access-Control-Allow-Credentials: true
یہ ترتیب اجازت دیتی ہے۔ https://trusted-domain.com
اپنی درخواست میں اسناد کے ساتھ درخواستیں کرنے کے لیے، جب کہ دوسری اصل سے درخواستوں کو مسترد کر دیا جاتا ہے۔ یہ پابندی ان ایپلیکیشنز کے لیے اہم ہے جو حساس معلومات کو سنبھالتی ہیں یا صارف کی جانب سے کارروائیاں کرتی ہیں۔
مزید برآں، اجازت شدہ طریقوں اور ہیڈر کی وضاحت سیکورٹی کو مزید سخت کرتی ہے:
Access-Control-Allow-Methods: GET, POST
Access-Control-Allow-Headers: Content-Type, X-Custom-Header
یہ سیٹ اپ اس بات کو یقینی بناتا ہے کہ مخصوص ہیڈر کے ساتھ صرف GET اور POST درخواستیں ہی قبول کی جائیں، جس سے غیر مجاز یا بدنیتی پر مبنی درخواستوں کا خطرہ کم ہوتا ہے۔
محفوظ CORS کے نفاذ کے لیے بہترین طریقے
- اجازت یافتہ اصلیت کی وضاحت کریں۔: وائلڈ کارڈ استعمال کرنے کے بجائے ہمیشہ مخصوص اصلیت کی وضاحت کریں۔
*
. یہ مشق اس بات کو یقینی بناتی ہے کہ صرف بھروسہ مند ڈومینز ہی آپ کی درخواست پر درخواستیں کر سکتے ہیں۔ - اسناد کے ساتھ رسائی کو محدود کریں۔: اسناد کی اجازت دیتے وقت محتاط رہیں۔ اس بات کو یقینی بنائیں
Access-Control-Allow-Credentials
پر مقرر ہےtrue
صرف اس وقت جب ضروری ہو اور اس کی اصلیت واضح طور پر بیان کی گئی ہو۔ - اجازت شدہ طریقوں اور ہیڈرز کی وضاحت کریں۔: واضح کریں کہ کن طریقوں اور ہیڈروں کی اجازت ہے۔ یہ پابندی نہ صرف سیکیورٹی کو سخت کرتی ہے بلکہ آپ کے API کے ساتھ تعامل کرنے والے ڈویلپرز کے لیے واضح دستاویزات بھی فراہم کرتی ہے۔
- پری فلائٹ درخواستیں استعمال کریں۔: پری فلائٹ درخواستوں کو قبول کرنے سے پہلے کراس اوریجن درخواستوں کی تصدیق کرنے کے لیے ان سے فائدہ اٹھائیں۔ پری فلائٹ کی درخواستیں تصدیق کی ایک اضافی پرت کا اضافہ کرتی ہیں، اس بات کو یقینی بناتے ہوئے کہ اصل درخواست آپ کی CORS پالیسی کے مطابق ہو۔
- CORS پالیسیوں کا باقاعدگی سے جائزہ لیں۔: جیسے جیسے آپ کی ایپلیکیشن تیار ہوتی ہے، باقاعدگی سے اپنی CORS پالیسیوں کا جائزہ لیں اور اپ ڈیٹ کریں تاکہ آپ کی ایپلی کیشن کے فن تعمیر اور ڈومین کے تعاملات میں تبدیلیوں کی عکاسی ہو۔
- CORS کو دیگر حفاظتی اقدامات کے ساتھ جوڑیں۔: CORS کو جامع حفاظتی حکمت عملی کا حصہ ہونا چاہیے۔ CORS پالیسیوں کو مواد کی حفاظت کی پالیسیوں (CSP)، ان پٹ کی توثیق، آؤٹ پٹ انکوڈنگ، اور XSS اور ویب کے دیگر خطرات سے بچانے کے لیے سیکیورٹی کے دیگر بہترین طریقوں کے ساتھ جوڑیں۔
CORS کے حفاظتی مضمرات کو سمجھ کر اور سخت CORS پالیسیوں پر عمل درآمد کر کے، ڈویلپرز اپنی ویب ایپلیکیشنز کو کراس اوریجن حملوں سے محفوظ رکھ سکتے ہیں جبکہ جدید ویب ایپلیکیشنز کو درکار ضروری کراس اوریجن تعاملات کو فعال کر سکتے ہیں۔
اعلی درجے کے CORS عنوانات
جیسے جیسے ویب ایپلیکیشنز پیچیدگی میں بڑھ رہی ہیں، کراس اوریجن ریسورس شیئرنگ (CORS) کی باریکیوں کو سمجھنا تیزی سے اہم ہوتا جا رہا ہے۔ یہ سیکشن اعلی درجے کے CORS موضوعات کو دریافت کرتا ہے، بشمول CORS اور API سیکورٹی، بنیادی کنفیگریشنز سے ہٹ کر، اور عام مسائل کا ازالہ کرنا۔
CORS اور API سیکورٹی: محفوظ کراس اوریجن درخواستوں کو یقینی بنانا
APIs جدید ویب ایپلیکیشنز کی ریڑھ کی ہڈی ہیں، جو مختلف سروسز میں ڈیٹا کے تبادلے اور فعالیت کو سہولت فراہم کرتے ہیں۔ CORS اس بات کو یقینی بنا کر API سیکورٹی میں ایک اہم کردار ادا کرتا ہے کہ صرف مجاز اصل ہی آپ کے API تک رسائی حاصل کر سکتے ہیں۔ یہاں ہے کہ CORS API سیکیورٹی کو کیسے بڑھاتا ہے:
- ٹوکن پر مبنی توثیق: بہت سے APIs رسائی کو محفوظ بنانے کے لیے ٹوکن پر مبنی تصدیق (جیسے OAuth 2.0, JWT) کا استعمال کرتے ہیں۔ ٹوکن ہیڈر کی اجازت دینے کے لیے CORS پالیسیوں کو احتیاط سے ترتیب دینے کی ضرورت ہے، جیسے
Authorization
، بھروسہ مند اصل سے۔ مثال کے طور پر اجازت دیناAuthorization
کراس اوریجن درخواستوں میں ہیڈر، آپ کے سرور کو اس میں واضح طور پر درج کرنا چاہیے۔Access-Control-Allow-Headers
.
Access-Control-Allow-Headers: Authorization
- تھرڈ پارٹی API کی کھپت: جب آپ کی ویب ایپلیکیشن تھرڈ پارٹی API استعمال کرتی ہے، تو ان APIs کی CORS پالیسیوں کو سمجھنا بہت ضروری ہے۔ اگر فریق ثالث API کے پاس CORS کی پابندی والی پالیسی ہے، تو آپ کو API کو درخواستیں بھیجنے کے لیے اپنے ڈومین پر سرور سائیڈ پراکسی استعمال کرنے کی ضرورت پڑ سکتی ہے، اس طرح CORS پابندیوں کو روکنا ہے۔
- کسٹم ہیڈرز کو بے نقاب کرنا: اگر آپ کا API ایپلیکیشن سے متعلق مخصوص معلومات کے لیے حسب ضرورت ہیڈر استعمال کرتا ہے، تو ان ہیڈرز کو واضح طور پر کلائنٹ کے سامنے آنا چاہیے۔
Access-Control-Expose-Headers
. یہ کلائنٹ سائڈ ایپلی کیشن کو ان ہیڈرز کی قدروں کو پڑھنے کی اجازت دیتا ہے۔
Access-Control-Expose-Headers: X-My-Custom-Header
بنیادی CORS سے آگے: ایڈوانس کنفیگریشن اور ٹربل شوٹنگ
اعلی درجے کی CORS کنفیگریشنز زیادہ پیچیدہ حالات کو حل کر سکتی ہیں:
- متحرک اصل کی توثیق: ایسی ایپلی کیشنز کے لیے جن کو اصل کے متحرک سیٹ سے درخواستوں کی اجازت دینے کی ضرورت ہے (مثال کے طور پر، کثیر کرایہ دار ایپلی کیشنز جہاں ہر کرایہ دار کا اپنا ڈومین ہے)، متحرک اصل کی توثیق کو نافذ کرنا ضروری ہے۔ اس میں پروگرام کی جانچ پڑتال شامل ہے۔
Origin
اجازت شدہ اصلیت کی فہرست کے خلاف ہیڈر اور سیٹنگAccess-Control-Allow-Origin
اس کے مطابق ہیڈر.
const allowedOrigins = ['https://tenant1.example.com', 'https://tenant2.example.com'];
const origin = request.headers.origin;
if (allowedOrigins.includes(origin)) {
response.setHeader('Access-Control-Allow-Origin', origin);
}
- ویب ساکٹس کے لیے CORS: اگرچہ WebSockets HTTP درخواستوں کی طرح CORS کے تابع نہیں ہیں، WebSocket کنکشن کو محفوظ بنانا بہت ضروری ہے۔ اس بات کو یقینی بنانا کہ ابتدائی WebSocket ہینڈ شیک درخواست (جو کہ ایک HTTP درخواست ہے) میں مناسب CORS کی توثیق شامل ہے ایک اچھا عمل ہے۔
- پری فلائٹ کیشے آپٹیمائزیشن:دی
Access-Control-Max-Age
ہیڈر کا استعمال یہ بتانے کے لیے کیا جا سکتا ہے کہ پری فلائٹ کی درخواست کے نتائج کب تک کیش کیے جا سکتے ہیں۔ اس قدر کو بہتر بنانا اس بنیاد پر کہ آپ کی CORS پالیسی میں کتنی بار تبدیلیاں پری فلائٹ درخواستوں کی تعداد کو کم کر سکتی ہیں، درخواست کی کارکردگی کو بہتر بنا سکتی ہے۔
Access-Control-Max-Age: 86400
عام CORS مسائل کا ازالہ کرنا
یہاں تک کہ ایک مناسب CORS سیٹ اپ کے ساتھ، مسائل پیدا ہو سکتے ہیں۔ عام CORS مسائل کو حل کرنے کی حکمت عملی یہ ہیں:
- غائب یا غلط CORS ہیڈر: یقینی بنائیں کہ متوقع CORS ہیڈر بھیجنے کے لیے آپ کا سرور درست طریقے سے ترتیب دیا گیا ہے۔ جیسے اوزار
curl
ہیڈر کو دستی طور پر معائنہ کرنے کے لیے استعمال کیا جا سکتا ہے:
curl -I -H "Origin: https://example.com" https://api.example.com/resource
- JavaScript Fetch API میں مبہم جوابات: جب Fetch API کے ساتھ درخواستیں کرتے ہیں تو، ایک مبہم جواب (نان کور کی درخواست کا جواب) مسائل کا باعث بن سکتا ہے کیونکہ یہ اس قسم کی معلومات کو محدود کرتا ہے جس تک آپ جواب کے بارے میں رسائی حاصل کر سکتے ہیں۔ یقینی بنائیں کہ آپ سیٹ نہیں کر رہے ہیں۔
mode: 'no-cors'
آپ کی Fetch API درخواستوں میں جب تک کہ بالکل ضروری نہ ہو۔ - اسناد کے ساتھ CORS کی خرابیاں: اگر آپ کی درخواستوں میں اسناد (کوکیز، HTTP توثیق) شامل ہیں تو یقینی بنائیں
Access-Control-Allow-Credentials
پر مقرر ہےtrue
، اور یہ کہAccess-Control-Allow-Origin
وائلڈ کارڈ نہیں ہے (*
). - پری فلائٹ کی درخواستوں کو ڈیبگ کرنا: اگر پری فلائٹ کی درخواستیں ناکام ہو رہی ہیں تو چیک کریں کہ آپ کا سرور ہینڈل کرتا ہے۔
OPTIONS
صحیح طریقے سے درخواست کرتا ہے اور یہ مناسب CORS ہیڈر کے ساتھ جواب دیتا ہے (Access-Control-Allow-Methods
,Access-Control-Allow-Headers
).
ان اعلی درجے کے CORS عنوانات میں غوطہ لگانے سے، ڈویلپرز بہتر طور پر سمجھ سکتے ہیں کہ کس طرح کراس اوریجن ریسورس شیئرنگ کے لیے اپنی ویب ایپلیکیشنز کو محفوظ اور بہتر بنایا جائے۔ چاہے API سیکورٹی، پیچیدہ CORS کنفیگریشنز، یا چیلنجنگ CORS مسائل کا ازالہ کرنا ہو، جدید ویب ڈویلپمنٹ کے لیے CORS کی گہری سمجھ ضروری ہے۔
نتیجہ
محفوظ ویب تعاملات کے لیے CORS کو سمجھنا ضروری ہے۔ اسے درست طریقے سے لاگو کرنا خلاف ورزیوں کے خلاف ایپلی کیشنز کو مضبوط کرتا ہے، اس کی سخت پالیسی XSS حملوں کے خلاف دفاع کرتی ہے، اور اعلی درجے کے موضوعات کی تلاش ویب کی ترقی کو بہتر بناتی ہے۔