প্রোটোটাইপ দূষণ আক্রমণ প্রতিরোধ কিভাবে?

Protota Ipa Dusana Akramana Pratirodha Kibhabe



প্রোটোটাইপ দূষণ আক্রমণ জাভাস্ক্রিপ্ট বস্তু তাদের সংশ্লিষ্ট প্রোটোটাইপগুলির সাথে মোকাবিলা করার উপায়কে কাজে লাগায়। জাভাস্ক্রিপ্টে, প্রোটোটাইপ হল আরেকটি অবজেক্ট যা নির্বাচিত বস্তুর জন্য ডিফল্ট বৈশিষ্ট্য এবং পদ্ধতি নির্ধারণ করে। একজন আক্রমণকারী বস্তুর বৈশিষ্ট্যগুলিকে ম্যানিপুলেট করে বা বস্তুগুলিকে পুনরাবৃত্তভাবে একত্রিত করে এমন একটি ফাংশন ব্যবহার করে এই প্রোটোটাইপগুলিতে দূষিত কোড ইনজেকশনের মাধ্যমে প্রোটোটাইপ দূষণকে কাজে লাগায়।

এই নির্দেশিকা প্রোটোটাইপ দূষণ আক্রমণ প্রতিরোধ করার উপায় ব্যাখ্যা করে।







প্রোটোটাইপ দূষণ আক্রমণ প্রতিরোধ?

প্রোটোটাইপ দূষণ আক্রমণের মূল কারণ হল জাভাস্ক্রিপ্ট বস্তুগুলি তাদের প্রোটোটাইপ থেকে বৈশিষ্ট্যগুলি উত্তরাধিকার সূত্রে প্রাপ্ত হয়। এর মানে হল যে যদি একজন আক্রমণকারী প্রোটোটাইপে দূষিত কোড ইনজেকশন করতে পারে, তাহলে সেই প্রোটোটাইপ থেকে উত্তরাধিকারসূত্রে প্রাপ্ত সমস্ত বস্তুর দ্বারা এটি উত্তরাধিকার সূত্রে প্রাপ্ত হবে। এটি ডেটা চুরি, নির্বিচারে কোড চালানো বা অন্যান্য অ্যাপ্লিকেশনের নিয়ন্ত্রণ গ্রহণের দিকে নিয়ে যায়।



নীচের কোড স্নিপেটে, প্রোটোটাইপ দূষণ কোড ইনজেকশন করা যাচ্ছে:



const y = { একটি: 1 , খ: 2 } ;
const ডেটা = JSON.parse ( '{'__proto__': { 'ত্রুটিপূর্ণ': সত্য}}' ) ;

const c = Object.assign ( { } , এবং, ডেটা ) ;
console.log ( গ. ত্রুটিপূর্ণ ) ;


উপরের কোড স্নিপেটের বিবরণ:





    • প্রথমে তালিকার নাম “ এবং ” তৈরি করা হয় এবং এটি কী-মান জোড়ায় মান সংরক্ষণ করে।
    • সাহায্যে ' তাই- ”, র্যান্ডম দূষিত কোড কী-মান বিন্যাসে প্রয়োগ করা হয়। কী সেট করা হয়েছে ' ত্রুটিপূর্ণ ' এবং 'এর নির্ধারিত মান সত্য
    • তারপরে, এই দূষিত কোডটি ' এবং 'আহ্বান করে তালিকা' বরাদ্দ () 'পদ্ধতি, এবং ফলাফল তালিকাটি 'নামক একটি নতুন তালিকায় সংরক্ষণ করা হয়
    • অবশেষে, ইনজেকশনের দূষিত কোড ' ” তালিকা পুনরুদ্ধার করা হয় এবং এর মান কনসোলে প্রদর্শিত হয়। দূষণ বা দূষিত ডেটা ইনজেকশন করা হয়েছে তা নিশ্চিত করতে।

ধারণকারী ফাইল চালানোর পরে, আউটপুট দেখায় যে দূষিত কোডটি সফলভাবে ইনজেকশন করা হয়েছে এবং এর মান পুনরুদ্ধার করা হয়েছে:



প্রোটোটাইপ দূষণ আক্রমণ প্রতিরোধ কিভাবে?

বিভিন্ন পন্থা আছে যার মাধ্যমে প্রোটোটাইপ দূষণ আক্রমণ প্রতিরোধ করা যেতে পারে:

অনিরাপদ পুনরাবৃত্ত একত্রীকরণ:

অনিরাপদ পুনরাবৃত্তিমূলক মার্জগুলি এড়িয়ে চলুন কারণ তারা প্রোটোটাইপ দূষণ আক্রমণের দিকে নিয়ে যেতে পারে:

যেখানে মার্জ = ( লাগে , src ) = > {
জন্য ( var বৈশিষ্ট্য ভিতরে src ) {
যদি ( ধরণ ( লাগে [ গুণাবলী ] ) === 'obj' && ধরণ ( src [ গুণাবলী ] ) === 'obj' )
{
একত্রিত করা ( লাগে [ গুণাবলী ] , src [ গুণাবলী ] ) ;
} অন্য {
লাগে [ গুণাবলী ] = src [ গুণাবলী ] ;
}
}
প্রত্যাবর্তন লাগে ;
} ;


উপরের কোডে:

    • প্রথমত, কাস্টম ফাংশন ' একত্রিত করা() ” তৈরি করা হয়েছে যা দুটি অ্যারে প্যারামিটার গ্রহণ করে “ লাগে ' এবং ' src
    • উন্নত ' জন্য 'ভেরিয়েবলের পুনরাবৃত্তি করতে লুপ ব্যবহার করা হয়' গুণাবলী 'প্রদত্ত উপর' src ” প্যারামিটার।
    • লুপের ভিতরে, একটি ব্যবহার করুন যদি ” বিবৃতি যা উভয় ত্রুটির মধ্য দিয়ে নেভিগেট করে এবং যদি উভয় অ্যারেতে থাকা কোনো উপাদান একই ডেটা টাইপ থাকে। তারপর সেই উপাদানগুলিকে একই প্যারামিটার হিসাবে পাস করা হয় ' একত্রিত করা() ” একটি পুনরাবৃত্ত প্রকৃতি তৈরি ফাংশন.
    • যদি প্রকারগুলি একই না হয়, তাহলে উপাদানের মান 'এ অবস্থিত src ' পরামিতি অ্যারে পাস করা হয় ' লাগে ” প্যারামিটার।
    • অবশেষে, ' লাগে ' প্যারামেট্রিক অ্যারে ফিরে আসে।

প্রোটোটাইপ হিমায়িত করা

প্রোটোটাইপ দূষণ আক্রমণের জন্য আরেকটি প্রতিরোধ হল তাদের মৃত্যুদন্ড চক্রকে হিমায়িত করা। এটি 'এর মাধ্যমে করা হয় Object.freeze() 'পদ্ধতি। নীচের স্নিপেটে, উপরের ইনজেকশনের প্রোটোটাইপড দূষিত কোড হিমায়িত হতে চলেছে:

const y = { একটি: 1 , খ: 2 } ;
const ডেটা = JSON.parse ( '{'__proto__': { 'ত্রুটিপূর্ণ': সত্য}}' ) ;

const c = Object.assign ( { } , এবং, ডেটা ) ;
console.log ( গ. ত্রুটিপূর্ণ ) ;

console.log ( অবজেক্ট.ফ্রিজ ( গ. ত্রুটিপূর্ণ ) ) ;
console.log ( Object.isFrozen ( গ. ত্রুটিপূর্ণ ) ) ;


উপরের কোডের ব্যাখ্যা নীচে দেখানো হয়েছে:

    • প্রাথমিকভাবে, ডামি প্রোটোটাইপ দূষিত কোড ডামি তালিকায় ইনজেকশন করা হবে ' এবং ' ঠিক যেমন উপরের বিভাগে ব্যাখ্যা করা হয়েছে।
    • তারপর, ইনজেকশনের দূষিত কী ' ত্রুটিপূর্ণ 'এ পাস করা হয়' বরফে পরিণত করা() দূষিত অংশ হিমায়িত করার পদ্ধতি।
    • অবশেষে, হিমায়িত প্রোটোটাইপ দূষণ অংশ নিশ্চিত করতে. দ্য ' ত্রুটিপূর্ণ 'তালিকার কী' 'এ পাস করা হয়' বরফাচ্ছন্ন() 'পদ্ধতি। এই পদ্ধতিটি ফিরে আসে ' সত্য 'হিমায়িত অবস্থায় এবং' মিথ্যা 'আনফ্রোজেন ক্ষেত্রে:

ধারণকারী কোড কার্যকর করার পরে, আউটপুট দেখায় যে হিমায়িত দূষিত কোডের ইনজেকশন, জমাকরণ এবং যাচাইকরণ:


প্রোটোটাইপ দূষণ আক্রমণ প্রতিরোধ করার জন্য অতিরিক্ত টিপস

কিছু অতিরিক্ত টিপস যা ব্যবহার করে প্রোটোটাইপ দূষণ আক্রমণ প্রতিরোধ করা যেতে পারে তা নীচে বর্ণিত হয়েছে:

    • এর বিকল্প ' -অক্ষম-প্রোটো 'এর কাজ নিষ্ক্রিয় বা হত্যা করতে ব্যবহার করা যেতে পারে' প্রোটোটাইপ।__প্রোটো__ 'সম্পত্তি।
    • 'এর সাহায্যে পদ্ধতিগুলি ব্যবহার করবেন না প্রোটোটাইপ
    • দ্বারা ' ব্যবহারকারীর ইনপুট স্যানিটাইজ করা ” যা কোনো দূষিত বা দূষিত কোড অপসারণের জন্য ব্যবহারকারীর ইনপুট যাচাইকরণ এবং ফিল্টারিং জড়িত।
    • ব্যাবহার ' সাদা তালিকা ”, যা একটি বস্তুর জন্য অনুমোদিত বৈশিষ্ট্য এবং পদ্ধতির একটি তালিকা। শ্বেত তালিকার সদস্য নয় এমন বৈশিষ্ট্য বা পদ্ধতিগুলি সেট বা পাওয়ার যে কোনও প্রচেষ্টা ব্লক করা হবে।

এটি সবই Node.js-এ প্রোটোটাইপ দূষণ আক্রমণ প্রতিরোধের বিষয়ে।

উপসংহার

প্রোটোটাইপ দূষণের আক্রমণ প্রতিরোধ করার জন্য, অনিরাপদ পুনরাবৃত্ত একীভূতকরণ এড়ানো, প্রোটোটাইপ হিমায়িত করা এবং একটি সাদাতালিকা ব্যবহার করার মত পন্থা __অতএব__ “প্রপার্টি সেট থেকে ব্যবহার করা যাবে। ব্যবহারের পাশাপাশি ' -অক্ষম-প্রোটো 'বিকল্পগুলি, 'এর ব্যবহার এড়ানো Object.prototype ', এবং ' ব্যবহারকারীর ইনপুট স্যানিটাইজ করা 'দূষিত কোডের জন্য। এই নির্দেশিকাটি নোডেজে প্রোটোটাইপ দূষণ আক্রমণ প্রতিরোধের চিত্র তুলে ধরেছে।