پروٹوٹائپ آلودگی کے حملوں کو کیسے روکا جائے؟

Prw W Ayp Alwdgy K Hmlw Kw Kys Rwka Jay



پروٹوٹائپ آلودگی کا حملہ جاوا اسکرپٹ اشیاء کے متعلقہ پروٹو ٹائپس کے ساتھ نمٹنے کے طریقے سے فائدہ اٹھاتا ہے۔ JavaScript میں، Prototypes ایک اور چیز ہے جو منتخب آبجیکٹ کے لیے پہلے سے طے شدہ خصوصیات اور طریقوں کی وضاحت کرتی ہے۔ ایک حملہ آور آبجیکٹ کی خصوصیات میں ہیرا پھیری کرکے یا بار بار اشیاء کو ضم کرنے والے فنکشن کا استعمال کرکے ان پروٹو ٹائپس میں بدنیتی پر مبنی کوڈ ڈال کر پروٹو ٹائپ آلودگی کا استحصال کرتا ہے۔

یہ گائیڈ پروٹو ٹائپ آلودگی کے حملوں کو روکنے کے طریقوں کی وضاحت کرتا ہے۔







پروٹو ٹائپ آلودگی کے حملوں کو روکیں؟

پروٹوٹائپ آلودگی کے حملوں کی بنیادی وجہ یہ ہے کہ جاوا اسکرپٹ آبجیکٹ اپنے پروٹو ٹائپ سے خصوصیات کو وراثت میں لیتے ہیں۔ اس کا مطلب یہ ہے کہ اگر کوئی حملہ آور پروٹوٹائپ میں بدنیتی پر مبنی کوڈ داخل کر سکتا ہے، تو یہ ان تمام اشیاء کو وراثت میں ملے گا جو اس پروٹو ٹائپ سے وراثت میں ملے ہیں۔ یہ ڈیٹا کی چوری، صوابدیدی کوڈ پر عمل درآمد، یا دیگر ایپلی کیشنز کو کنٹرول کرنے کا باعث بنتا ہے۔



نیچے دیے گئے کوڈ کے ٹکڑوں میں، پروٹوٹائپ آلودگی کا کوڈ لگایا جا رہا ہے:



const y = { a: 1 ، ب: 2 } ;
const ڈیٹا = JSON.parse ( '{'__proto__': { 'غلط': سچ}}' ) ;

const c = Object.assign ( { } ، اور، ڈیٹا ) ;
console.log ( c. ناقص ) ;


مندرجہ بالا کوڈ کے ٹکڑوں کی تفصیل:





    • سب سے پہلے، فہرست کا نام ' اور ” بنایا جاتا ہے اور یہ قدروں کو کلیدی قدر کے جوڑے میں محفوظ کرتا ہے۔
    • کی مدد سے ' اس لیے- ”، بے ترتیب آلودہ کوڈ کو کلیدی قدر کی شکل میں لاگو کیا جاتا ہے۔ کلید پر سیٹ ہے ' ناقص 'اور تفویض کردہ قدر' سچ ہے '
    • پھر، اس آلودہ کوڈ کو تفویض کیا جاتا ہے ' اور 'لسٹ' کو پکار کر تفویض() 'طریقہ، اور نتیجے کی فہرست ایک نئی فہرست میں محفوظ کی جاتی ہے جس کا نام ہے' c '
    • آخر میں، انجکشن آلودہ کوڈ ' c ' فہرست بازیافت کی جاتی ہے اور اس کی قیمت کنسول پر ظاہر ہوتی ہے۔ اس بات کو یقینی بنانے کے لیے کہ آلودگی یا بدنیتی پر مبنی ڈیٹا انجکشن کیا گیا ہے۔

پر مشتمل فائل کو انجام دینے کے بعد، آؤٹ پٹ سے پتہ چلتا ہے کہ نقصان دہ کوڈ کو کامیابی کے ساتھ انجکشن کیا گیا ہے اور اس کی قیمت کو بازیافت کیا گیا ہے:



پروٹوٹائپ آلودگی کے حملوں کو کیسے روکا جائے؟

ایسے کئی طریقے ہیں جن کے ذریعے پروٹوٹائپ آلودگی کے حملے کو روکا جا سکتا ہے:

غیر محفوظ تکراری انضمام:

غیر محفوظ تکراری انضمام سے بچیں کیونکہ وہ پروٹوٹائپ آلودگی کے حملوں کا باعث بن سکتے ہیں:

جہاں ضم کریں = ( لیتا ہے , src ) = > {
کے لیے ( var صفات میں src ) {
اگر ( کی قسم ( لیتا ہے [ صفات ] ) === 'obj' && کی قسم ( src [ صفات ] ) === 'obj' )
{
ضم ( لیتا ہے [ صفات ] , src [ صفات ] ) ;
} اور {
لیتا ہے [ صفات ] = src [ صفات ] ;
}
}
واپسی لیتا ہے ;
} ;


مندرجہ بالا کوڈ میں:

    • سب سے پہلے، اپنی مرضی کے مطابق فنکشن ' ضم() 'بنایا جاتا ہے جو دو صفوں کے پیرامیٹرز کو قبول کرتا ہے' لیتا ہے 'اور' src '
    • بڑھا ہوا' کے لیے 'لوپ متغیر کو دوبارہ کرنے کے لئے استعمال کیا جاتا ہے' صفات 'فراہم کردہ پر' src 'پیرامیٹر۔
    • لوپ کے اندر، استعمال کریں ' اگر ” بیان جو دونوں غلطیوں کے ذریعے نیویگیٹ کرتا ہے اور اگر دونوں صفوں میں رہنے والا کوئی عنصر ایک ہی ڈیٹا کی قسم رکھتا ہے۔ پھر ان عناصر کو پیرامیٹرز کے طور پر اسی میں منتقل کیا جاتا ہے ' ضم() فنکشن ایک بار بار چلنے والی فطرت پیدا کرتا ہے۔
    • اگر اقسام ایک جیسی نہیں ہیں تو، عنصر کی قدر جو ' src 'پیرامیٹر سرنی کو منتقل کیا جاتا ہے' لیتا ہے 'پیرامیٹر۔
    • آخر میں، ' لیتا ہے 'پیرامیٹرک سرنی واپس ہو جاتی ہے۔

پروٹوٹائپ کو منجمد کرنا

پروٹوٹائپ آلودگی کے حملوں کے لئے ایک اور روک تھام ان کے عملدرآمد سائیکل کو منجمد کرنا ہے. یہ 'کے ذریعے کیا جاتا ہے Object.freeze() 'طریقہ. ذیل کے ٹکڑوں میں، مندرجہ بالا انجکشن شدہ پروٹو ٹائپ آلودہ کوڈ منجمد ہونے جا رہا ہے:

const y = { a: 1 ، ب: 2 } ;
const ڈیٹا = JSON.parse ( '{'__proto__': { 'غلط': سچ}}' ) ;

const c = Object.assign ( { } ، اور، ڈیٹا ) ;
console.log ( c. ناقص ) ;

console.log ( Object.freeze ( c. ناقص ) ) ;
console.log ( Object.isFrozen ( c. ناقص ) ) ;


مندرجہ بالا کوڈ کی وضاحت ذیل میں دکھایا گیا ہے:

    • ابتدائی طور پر، ڈمی پروٹو ٹائپ آلودہ کوڈ کو ڈمی لسٹ میں داخل کیا جائے گا۔ اور جیسا کہ اوپر والے حصے میں بیان کیا گیا ہے۔
    • پھر، انجکشن آلودہ کلید ' ناقص 'کو منتقل کیا جاتا ہے' منجمد() آلودہ حصے کو منجمد کرنے کا طریقہ۔
    • آخر میں، منجمد پروٹوٹائپ آلودگی حصہ کی تصدیق کرنے کے لئے. ' ناقص 'فہرست کی کلید' c 'کو منتقل کیا جاتا ہے' منجمد ہے() 'طریقہ. یہ طریقہ واپس آتا ہے ' سچ ہے منجمد ہونے کی صورت میں اور جھوٹا 'غیر منجمد ہونے کی صورت میں:

پر مشتمل کوڈ پر عمل کرنے کے بعد، آؤٹ پٹ ظاہر کرتا ہے کہ انجکشن، منجمد، اور منجمد آلودہ کوڈ کی تصدیق:


پروٹو ٹائپ آلودگی کے حملے کو روکنے کے لیے اضافی تجاویز

کچھ اضافی نکات جن کو استعمال کرکے پروٹو ٹائپ آلودگی کے حملے کو روکا جا سکتا ہے ذیل میں بیان کیا گیا ہے۔

    • کا اختیار ' غیر فعال پروٹو 'کے کام کو غیر فعال یا ختم کرنے کے لئے استعمال کیا جا سکتا ہے' prototype.__proto__ ' جائیداد.
    • کی مدد سے طریقے استعمال نہ کریں۔ نمونہ '
    • کی طرف سے ' یوزر ان پٹ کو سینیٹائز کرنا جس میں کسی بھی نقصان دہ یا آلودہ کوڈ کو ہٹانے کے لیے صارف کے ان پٹ کی توثیق اور فلٹرنگ شامل ہے۔
    • کا استعمال ' وائٹ لسٹ ”، جو کسی شے کے لیے اجازت شدہ خصوصیات اور طریقوں کی فہرست ہے۔ پراپرٹیز یا طریقوں کو سیٹ کرنے یا حاصل کرنے کی کسی بھی کوشش کو بلاک کر دیا جائے گا جو وائٹ لسٹ کے ممبر نہیں ہیں۔

یہ سب Node.js میں پروٹوٹائپ آلودگی کے حملوں کی روک تھام کے بارے میں ہے۔

نتیجہ

پروٹوٹائپ آلودگی کے حملوں کو روکنے کے لیے، غیر محفوظ بار بار انضمام سے بچنے، پروٹوٹائپ کو منجمد کرنے، اور وائٹ لسٹ کا استعمال جیسے طریقوں کو روکنے کے لیے۔ __اس لیے__ سیٹ ہونے سے جائیداد استعمال کی جا سکتی ہے۔ کے استعمال کے ساتھ ساتھ ' غیر فعال پروٹو 'اختیارات،' کے استعمال سے گریز Object.prototype '، اور ' صارف کے ان پٹ کو صاف کرنا آلودہ کوڈ کے لیے۔ اس گائیڈ نے نوڈجز میں پروٹوٹائپ آلودگی کے حملوں کی روک تھام کی مثال دی ہے۔