نوٹس (Notes) کی ایک ایپلی کیشن ایلس (Alice) کو ‘سہ ماہی بجٹ کا مسودہ’ (Quarterly budget draft) بطور نوٹ ‘1’ محفوظ کرنے کی سہولت دیتی ہے۔ باب (Bob) اپنے اکاؤنٹ میں لاگ ان ہوتا ہے، GET /notes/1 کی درخواست بھیجتا ہے، اور اسے ایلس کا نوٹ موصول ہو جاتا ہے کیونکہ سرور صرف یہ تو چیک کرتا ہے کہ باب لاگ ان ہے یا نہیں، لیکن کبھی یہ نہیں دیکھتا کہ آیا باب نوٹ ‘1’ کا مالک ہے یا نہیں۔ باب کو نہ تو ایلس کے پاس ورڈ کی ضرورت تھی اور نہ ہی کسی خصوصی رسائی کی، اسے صرف ایک ایسے شناخت کنندہ (identifier) کی ضرورت تھی جس کا اندازہ لگایا جا سکے۔ اگر باب نوٹ ‘1’ کی درخواست کرتا ہے، تو کیا API کو ایلس کا مواد فراہم کرنا چاہیے؟ نیچے دی گئی ایک مختصر مقامی مثال غیر محفوظ درخواست اور جواب (response) کو ظاہر کرتی ہے:
یہ کوڈ ایلس (Alice) کا JSON ریکارڈ واپس کرتا ہے جبکہ باب (Bob) کی بطورِ صارف (acting user) شناخت کرتا ہے۔ یہاں نظر آنے والی خرابی ایکسس کنٹرول کا ٹوٹ جانا (broken access control) ہے، جس میں سرور کسی تصدیق شدہ شخص کو ایسا عمل کرنے کی اجازت دیتا ہے جو اس کے مجاز دائرہ کار سے باہر ہے۔ اس کا فوری تدارک نوٹ کو پڑھنے سے پہلے سرور کی سطح پر ملکیت کی جانچ (ownership check) ہے، اور اس کی نشاندہی کرنے والا سگنل ایک لاگ انٹری ہے جو باب، نوٹ 1، اور اجازت مسترد کیے جانے کے فیصلے کو ریکارڈ کرتی ہے۔ ہم اسی ایک ‘نوٹس ایپلی کیشن’ (Notes application) کو درست کرتے رہیں گے تاکہ ہر سیکیورٹی اصول کسی درخواست، کوڈ کے حصے، اور اصلاح کی تصدیق کے طریقے سے منسلک رہے۔
ملکیت کی جانچ کا نہ ہونا اس لیے اہم ہے کیونکہ براؤزر API سرور کی ‘اعتماد کی حد’ (trust boundary) سے باہر ہوتا ہے۔ اعتماد کی حد وہ مقام ہے جہاں ایپلی کیشن ایسا ڈیٹا یا ہدایت وصول کرتی ہے جس پر کوئی دوسرا فریق اثر انداز ہو سکتا ہے، لہذا سرور کے لیے ضروری ہے کہ وہ اس کی تصدیق کرے اور اپنے اصولوں کا اطلاق کرے۔ باب کی کوکی (cookie) اور مطلوبہ نوٹ کی ID ایک غیر معتبر کلائنٹ سے سرور تک منتقل ہوتی ہیں؛ اس کے بعد API اجازت کا فیصلہ کرنے کے بعد ہی ڈیٹا بیس کی استفسار (query) بھیجتا ہے۔
اسی ایپلی کیشن میں داخلے کے ایک سے زیادہ مقامات (entry points) ہیں۔ انٹرنیٹ کا کوئی غیر تصدیق شدہ صارف لاگ ان ڈیٹا جمع کر سکتا ہے یا نوٹ بنا سکتا ہے۔ باب جیسا کم اختیارات (low-privilege) والا صارف لاگ ان کے بعد نوٹ کی IDs اور نوٹ کا متن فراہم کر سکتا ہے۔ ‘بلڈ’ (build) کے عمل کے دوران کوئی متاثرہ یا غیر محفوظ ‘ڈیپینڈنسی’ (dependency) سسٹم میں داخل ہو سکتی ہے جب پیکیج رجسٹری ایسا کوڈ فراہم کرتی ہے جسے سرور بعد میں چلاتا ہے۔ جن اثاثوں (assets) کا تحفظ ضروری ہے ان میں فعال سیشنز، ایلس کے نوٹس، سرور کے خفیہ ڈیٹا (secrets)، اور وہ لاگز شامل ہیں جو ہمیں بتاتے ہیں کہ کون سی درخواستیں موصول ہوئیں۔ یہ خاکہ ہر ان پٹ (input) کا اس جزو (component) تک پیچھا کرتا ہے جسے یہ فیصلہ کرنا ہوتا ہے کہ آیا اس پر اعتماد کیا جائے یا نہیں: