ایڈمن انٹرفیس کو admin.example.com پر منتقل کرنا حقیقی بہتری ہے: یہ ایڈمن کوکیز کو عوامی صفحات سے دور رکھتا ہے، دونوں ایپلیکیشنز کو الگ کیش دیتا ہے اور آپ کو زیادہ سخت نیٹ ورک پالیسی ایک ہوسٹ نام پر مرکوز کرنے دیتا ہے۔ لیکن یہ CSRF کنٹرول نہیں ہے، اور عوامی سائٹ کے کوڈ کو لاگ ان ایڈمن کے سامنے کھلا رکھنے کے لیے محفوظ نہیں بناتا۔ علیحدگی وہ بدلتی ہے جسے براؤزر حد سمجھتا ہے، نہ کہ وہ جسے سرور جانچتا ہے، اس لیے کام مکمل کہنے سے پہلے یہ چار جانچیں کریں۔

اصل اور سائٹ کو دو الگ الفاظ کی طرح پڑھیں

اصل یعنی اسکیم، ہوسٹ اور پورٹ، اس لیے https://www.example.com اور https://admin.example.com الگ اصل ہیں۔ سائٹ SameSite کے معنی میں اسکیم جمع رجسٹر ہونے والا ڈومین ہے، اس لیے یہ دونوں ہوسٹ نام عام طور پر ایک ہی سائٹ ہیں۔ یہی فرق پورا جال ہے: SameSite خصوصیت بہن ذیلی ڈومینز کے درمیان مدد نہیں کرے گی، کیونکہ براؤزر درخواست کو بالکل سائٹ کے پار نہیں سمجھتا۔ ایڈمن انٹرفیس کو واقعی الگ رجسٹر ہونے والے ڈومین، جیسے admin-example.net، کی طرف موڑیں، پھر درخواست واقعی سائٹ کے پار ہوتی ہے، اور وہیں SameSite=Lax یا Strict قابل بھروسہ کام شروع کرتا ہے۔

اس پر استدلال کرنے کے بجائے براؤزر میں جانچیں۔

عوامی سائٹ لوڈ کریں، ڈویلپر ٹولز کھولیں اور دیکھیں کہ براؤزر ایڈمن ہوسٹ کی طرف جانے والی درخواست کے ساتھ کون سی کوکیز جوڑتا ہے۔ اگر کوکی میں Domain خصوصیت نہیں ہے تو یہ صرف ہوسٹ کے لیے ہے اور اپنے نام پر رہتی ہے؛ اگر اس میں Domain=example.com ہے تو یہ ہر بہن کے پاس جاتی ہے، اور نئے ذیلی ڈومین نے اس کوکی کے لیے آپ کو کچھ نہیں دیا۔

جواب پڑھنے کو درخواست بھیجنے سے الگ کریں

ایک ہی اصل کی پالیسی اصلوں کے درمیان جوابات پڑھنے کو محدود کرتی ہے۔ یہ درخواست بھیجنے کو نہیں روکتی، اور نہ ہی فارم کو وہ اسناد لے جانے سے روکتی ہے جو براؤزر کے پاس پہلے سے ہیں۔ سادہ درخواست، فارم کے مواد کی قسم یا سادہ GET کے ساتھ، پیشگی جانچ کے بغیر پہنچائی جاتی ہے؛ پھر CORS فیصلہ کرتا ہے کہ بلانے والی اسکرپٹ جواب پڑھ سکتی ہے یا نہیں۔ CSRF مکمل طور پر بھیجنے کی طرف رہتا ہے۔

اسی لیے سرور کو حالت بدلنے والے کاموں کے لیے واضح جانچ درکار ہے۔ سیشن سے بندھا ہم آہنگی ٹوکن، یا سرور پر موازنہ ہونے والی دوہری جمع کوکی اس صورت کو ڈھانپتی ہے؛ Origin یا Referer کا موازنہ دوسرے گیٹ کے طور پر شامل کرنا قابل قدر ہے مگر واحد نہیں، کیونکہ ہر درخواست وہ ہیڈر نہیں لاتی اور ہر پراکسی اسے محفوظ نہیں رکھتی۔ CSRF کی روک تھام کے لیے OWASP رہنما اصول SameSite کو کئی تہوں میں سے ایک مانتے ہیں، اسی وجہ سے۔

فیصلہ کریں کہ نیٹ ورک گیٹ واقعی کیا ثابت کرتا ہے

ایڈمن ہوسٹ کے سامنے VPN خارجی راستوں کی اجازت فہرست اچھا کنٹرول اور کمزور شناخت کا دعوی ہے۔ یہ ثابت کرتی ہے کہ درخواست ایسے پتے سے آئی جو VPN دیتا ہے، جسے اس خارجی راستے پر سبھی share کر سکتے ہیں، اور اس کے پیچھے کون شخص یا آلہ ہے اس بارے میں کچھ نہیں کہتی۔ اسے داخلے کا فلٹر سمجھیں، شناخت کی تصدیق نہیں۔

اسے درخواست کی سطح کی جانچوں سے آزاد رکھیں۔ اگر فہرست حملہ آور اور حالت بدلنے والے آخری نقطے کے درمیان واحد چیز ہے، تو ایک غلط ترتیب شدہ راستہ، ایک split-tunnel کلائنٹ یا ایک مانگی ہوئی لیپ ٹاپ کنٹرول مکمل طور پر ہٹا دیتا ہے۔

متوقع حدود سے باہر کی مستردگیاں بھی لاگ کریں۔ ان کا اچھلنا اس بات کا سب سے مفید اشارہ ہے کہ کوئی آپ کی ابھی بنائی ہوئی حد کو ٹٹول رہا ہے، اور خاموشی اس بات کا اشارہ ہے کہ فلٹر تک کچھ پہنچتا ہی نہیں۔

کوکیز، لاگ ان اور اجازت کو واضح رکھیں

کوکی کا دائرہ زیادہ تر نتیجہ طے کرتا ہے۔ والدین ڈومین کی کوکی ایڈمن ہوسٹ کو بھیجی جاتی ہے، اس لیے عوامی سائٹ پر اسکرپٹ انجیکشن ایڈمن کے سیشن کے ساتھ کام کر سکتا ہے؛ صرف ہوسٹ کے لیے کوکی نہیں کر سکتی۔ صرف ہوسٹ والی شکل چنیں، Secure خصوصیت شامل کریں اور جہاں پلیٹ فارم معاونت کرے __Host- سابقہ استعمال کریں، کیونکہ وہ سابقہ Secure، Path=/ اور Domain خصوصیت نہ ہونے کا تقاضا کرتا ہے۔ کوکی مرتبان نہیں، جواب کا ہیڈر پڑھیں: Set-Cookie: __Host-admin_session=...; Secure; Path=/; HttpOnly; SameSite=Lax، Domain خصوصیت کے بغیر۔ براؤزر Domain والی __Host- کوکی پھینک دیتا ہے، اس لیے بہن ہوسٹوں پر اب بھی نظر آنے والی کوکی اس بات کا ثبوت ہے کہ سابقہ کبھی لاگو نہیں ہوا۔

پھر اجازت سرور پر، ہر درخواست کے لیے، ہر ایڈمن آخری نقطے پر رکھیں، صرف لاگ ان کے وقت نہیں۔ اجازت یافتہ نیٹ ورک سے آنے والی درخواست بھی تصدیق شدہ ہونی چاہیے اور جو کام مانگتی ہے اس کے لیے مجاز ہونی چاہیے؛ ہوسٹ نام کوئی فاعل نہیں۔ اگر عوامی اور ایڈمن ایپلیکیشنز لاگ ان کا بہاؤ یا سیشن کا ذخیرہ share کرتی ہیں، تو وہ تعلق لکھ کر رکھیں، کیونکہ عوامی سائٹ کی خرابی سے ایڈمن کارروائی تک سب سے چھوٹا راستہ وہی ہے۔

علیحدگی کے بعد حد دوبارہ جانچیں

صرف خوشگوار راستہ نہیں، منفی جانچیں چلائیں: بغیر ٹوکن سائٹ کے پار فارم مسترد ہونا چاہیے، دوسرے سیشن کا ٹوکن مسترد ہونا چاہیے، اور کوئی GET حالت نہیں بدلنی چاہیے۔ ڈویلپر ٹولز میں کوکی کی خصوصیات جانچیں، ناہم آہنگ درخواست پر Origin جانچ کے متحرک ہونے کی تصدیق کریں، اور فلٹر کو کام کرتا دیکھنے کے لیے VPN کی حد سے باہر سے ایڈمن ہوسٹ آزمائیں۔

ان میں سے کوئی بھی ایڈمن ایپلیکیشن کے اندر کی XSS خرابی کو دور نہیں کرتا۔ الگ ہوسٹ نام حقیقی قدر والی براؤزر کی طرف کی تنہائی کی حد ہے، اور یہ غیر محفوظ کوڈ چلانے کی روک تھام یا سرور کی طرف کی درخواست تحفظ کا متبادل نہیں۔ علیحدگی کے بعد فہرست دکھنے سے چھوٹی ہے: الگ اصل، صرف ہوسٹ کے لیے کوکیز، ہر تبدیلی پر ٹوکن، شناخت کے طور پر ناقابل بھروسہ داخلہ فلٹر، اور ہر درخواست کے لیے طے شدہ اجازت۔

متعلقہ مضامین