SharedArrayBuffer آخر کار براؤزر میں دوبارہ کام کرنے لگا ہے، لیکن یہ صرف تب ہی کام کرتا ہے جب پیج cross-origin isolated ہو – ایک ایسی حالت جس کے لیے دو response headers کی ضرورت ہوتی ہے۔ ان ہیڈرز کو شامل کرنے کی وجہ سے مجھے اپنی سائٹ سے ہر تیسری تھرڈ پارٹی اسکرپٹ کو ہٹانا پڑا، ایک ایسا قدم جس نے پورے فرنٹ اینڈ کی تعمیر اور اس کے ذریعے ڈیٹا کے لیک (leak) ہونے کے طریقے کو بدل کر رکھ دیا۔
ہیڈرز کیوں اہم ہیں
SharedArrayBuffer JavaScript میں حقیقی multithreading کو ممکن بناتا ہے، جو کہ ایک ٹیب کے اندر ffmpeg چلانے کے لیے ایک لازمی شرط ہے۔ جدید براؤزرز نے Spectre طرز کے اقدامات کے بعد اس فیچر کو دوبارہ فعال کر دیا ہے، لیکن انہوں نے اسے cross-origin isolation سے جوڑ دیا ہے۔ اس آئسولیشن کو حاصل کرنے کے لیے سرور کو یہ بھیجنا چاہیے:
Cross-Origin-Opener-Policy: same-originCross-Origin-Embedder-Policy: require-corp
دوسرا ہیڈر، require-corp براؤزر کو بتاتا ہے کہ کوئی بھی بیرونی ریسورس (external resource) یا تو Cross-Origin-Resource-Policy ہیڈر رکھتا ہو یا اسے CORS (Cross-Origin Resource Sharing) کے ذریعے حاصل کیا گیا ہو۔ زیادہ تر تھرڈ پارٹی سروسز یہ ہیڈرز سیٹ نہیں کرتیں، اس لیے ان کے اسکرپٹس، فونٹس اور iframes کو مکمل طور پر بلاک کر دیا جاتا ہے۔
آئسولیشن آن کرنے پر کیا کچھ ختم ہو گیا
جیسے ہی ہیڈرز لائیو ہوئے، ناکامیوں کا ایک سلسلہ شروع ہو گیا:
- Analytics – زیادہ تر فراہم کنندگان اپنا ٹریکنگ کوڈ ایک سادہ
<script>کے ذریعے لوڈ کرتے ہیں جو no-CORS ریکویسٹ کرتا ہے۔ CORP ہیڈر کے بغیر ریکویسٹ مسترد ہو جاتی ہے، اس لیے ٹریکر کبھی نہیں چلتا۔ - Google Fonts – اسٹائل شیٹ
fonts.googleapis.comسے بغیر CORS کے حاصل کی جاتی ہے۔ براؤزر اسے مسترد کر دیتا ہے، جس سے پیج اپنی کسٹم ٹائپوگرافی کے بغیر رہ جاتا ہے۔ - Embedded media – YouTube iframes اور ویجیٹ اسکرپٹس میں CORP کی کمی ہوتی ہے، اس لیے وہ رینڈر ہونا بند ہو جاتے ہیں۔
- OAuth pop-ups – سخت same-origin پالیسی کی وجہ سے
window.openerکا تعلق ٹوٹ جاتا ہے، جس سے عام پاپ اپ پر مبنی لاگ ان فلو متاثر ہوتا ہے۔
مختصر یہ کہ، کوئی بھی اثاثہ (asset) جو تھرڈ پارٹی ڈومین پر انحصار کرتا تھا، وہ غائب ہو گیا جب تک کہ وہ ڈومین نئے ہیڈر ریجیم کو اختیار نہ کر لے۔
درمیانی واسطوں کے بغیر دوبارہ تعمیر کرنا
ایک خراب سائٹ کا سامنا کرتے ہوئے، میں نے خود ہوسٹ شدہ اثاثوں (self-hosted assets) کے گرد فرنٹ اینڈ اسٹیک کو دوبارہ لکھا:
- Fonts and images اب میرے اپنے اوریجن سے فراہم کیے جاتے ہیں، جس سے بیرونی اسٹائل شیٹس کی ضرورت ختم ہو جاتی ہے۔
- Data APIs ایک نجی بیک اینڈ پر بنائے گئے ہیں جسے میں کنٹرول کرتا ہوں، تاکہ ہر ریکویسٹ میرے ڈومین کے اندر رہے۔
- Analytics ایک چھوٹے سے Cloudflare Worker میں تبدیل ہو گئے جو
POSTایونٹس کو قبول کرتا ہے اور انہیں ایک نجی بکٹ (bucket) میں اسٹور کرتا ہے۔ کلائنٹ سائیڈ پر صرف fetch کوڈ کی ایک درجن لائنیں ہیں۔ - Error reporting and session replay جیسے ٹولز مثلاً Sentry کو مکمل طور پر ہٹا دیا گیا؛ اب کوئی بھی کریش میرے اپنے اینڈ پوائنٹ پر لاگ کیا جاتا ہے۔
اگر کسی بیرونی ریسورس کی ضرورت ہو، تو واحد قابل عمل راستہ اسے اپنے سرور کے ذریعے پراکسی کرنا ہے، اور براؤزر کے دیکھنے سے پہلے اس میں ضروری CORP ہیڈر شامل کرنا ہے۔
پرائیویسی کے فوائد بمقابلہ آپریشنل لاگت
فوری فائدہ واضح ہے: سائٹ اب اشتہاری نیٹ ورکس، فونٹ فراہم کنندگان، یا ویڈیو پلیٹ فارمز کو استعمال کا ڈیٹا لیک نہیں کرتی۔ تمام ٹیلی میٹری (telemetry) میرے کنٹرول میں رہتی ہے، اور میں جب چاہوں اسے ڈیلیٹ کر سکتا ہوں۔ عام تھرڈ پارٹی اسٹیک کے ساتھ اس سطح کی پرائیویسی حاصل کرنا مشکل ہے۔
اس کا نقصان اضافی دیکھ بھال (maintenance) کا بوجھ ہے۔ فونٹس کی ہوسٹنگ، اینالیٹکس اسٹوریج کو سنبھالنا، اور پراکسی کو اپ ٹو ڈیٹ رکھنا ایسے کام ہیں جنہیں زیادہ تر ڈویلپرز مخصوص سروسز کو آؤٹ سورس کر دیتے ہیں۔ اس طریقہ کار کا مطلب ان فیچرز سے محروم ہونا بھی ہے جو وہ سروسز فراہم کرتی ہیں – مثال کے طور پر، ریئل ٹائم ایرر ایگریگیشن یا تفصیلی فنل ویژولائزیشن۔
ایک دوسرا نقطہ نظر: کیا ایکوسسٹم خود کو ڈھال لے گا؟
کچھ لوگوں کا کہنا ہے کہ تھرڈ پارٹی وینڈرز آخر کار مطلوبہ ہیڈرز شامل کر دیں گے، جس سے cross-origin isolation کو اپنانا آسان ہو جائے گا۔ چند پہلے ہی ایسا کر رہے ہیں، لیکن زیادہ تر وسیع پیمانے پر استعمال ہونے والی سروسز اب بھی ایسا نہیں کرتیں۔ جب تک ایکوسسٹم اس کے مطابق نہیں ہو جاتا، ڈویلپرز کو یہ فیصلہ کرنا ہوگا کہ آیا پرائیویسی کا فائدہ خود ہوسٹنگ کے لیے درکار انجینئرنگ کوشش سے زیادہ ہے یا نہیں۔
تصدیق کیسے کریں کہ آپ واقعی آئسولیٹڈ ہیں
دوبارہ لکھنا شروع کرنے سے پہلے، اس بات کی تصدیق کریں کہ براؤزر آپ کے پیج کو آئسولیٹڈ کے طور پر دیکھ رہا ہے:
crossOriginIsolated // should be true
typeof SharedArrayBuffer // should be "function"
اگر کوئی بھی چیک فیل ہو جائے، تو اس کا مطلب ہے کہ ہیڈرز صحیح طریقے سے لاگو نہیں ہو رہے ہیں، اور SharedArrayBuffer دستیاب نہیں رہے گا۔
ڈویلپرز کے لیے آگے کیا ہے؟
جیسے جیسے زیادہ ویب ایپس ملٹی تھریڈڈ JavaScript کی کارکردگی میں اضافے کی تلاش میں ہیں، CORP کو اپنانے کے لیے تھرڈ پارٹی فراہم کنندگان پر دباؤ بڑھے گا۔ اس دوران، کسی بھی پروجیکٹ کو جسے SharedArrayBuffer کی ضرورت ہو، اسے خود ہوسٹ شدہ اثاثوں کی حکمت عملی یا ایک ہلکے پھلکے پراکسی لیئر کے لیے منصوبہ بندی کرنی چاہیے۔ آئسولیشن کی ضروریات میں تبدیلیوں کے لیے براؤزر کے ریلیز نوٹس پر نظر رکھنا بھی ضروری ہوگا۔
اہم نکتہ: SharedArrayBuffer تک رسائی کے لیے cross-origin isolation کو فعال کرنا ایک مشکل انتخاب پر مجبور کرتا ہے – یا تو تھرڈ پارٹی اسکرپٹس کی سہولت برقرار رکھی جائے یا اس کے بدلے ایک زیادہ سخت اور خود مختار پرائیویسی ماڈل اپنایا جائے۔ یہ فیصلہ جدید ویب سائٹس کے technical architecture اور data-flow footprint دونوں کو نئی شکل دیتا ہے۔
