মূলত 5 মার্চ, 2019 এ প্রকাশিত
আপনি যদি একজন অ্যাপ্লিকেশান ডেভেলপার, ডেটাবেস অ্যাডমিনিস্ট্রেটর (DBA), বা টেকনোলজিস্টের কোনো ফ্লেভার হন, তাহলে কোড ইনজেকশন আপনার রাডারে থাকা উচিত।
আপনি একটি নিরাপদ মেঘ পরিবেশ আছে. আপনি ডাটাবেস অ্যাক্সেস লক ডাউন আছে. কিন্তু আপনার অ্যাপ্লিকেশান কোডের কী হবে?যদিও এটিকে আরও নিরাপদ বলে মনে করা হয়, তবে না NoSQLi এর মানে এই নয় যে এটি আন-ইনজেকশনযোগ্য! NoSQL অন্য যেকোনো ডাটাবেস কোডের মতোই কোড ইনজেকশনের জন্য সংবেদনশীল হতে পারে। কোড ইনজেকশন থেকে রক্ষা না করা আপনার দরজার জন্য একটি নিরাপত্তা ব্যবস্থা স্থাপন করা এবং পিছনের একটি জানালা খোলা রাখার মতো।
কোড ইনজেকশন কি?
কোড ইনজেকশনটি কেবল অপ্রমাণিত ডেটা ইনজেক্ট করা (বা যোগ করা) একটি দুর্বল প্রোগ্রামে যেখানে এটি অ্যাপ্লিকেশন কোড আকারে কার্যকর করে, প্রায়ই বিপর্যয়কর ফলাফলের জন্য।
SQLi হল সবচেয়ে সাধারণ ধরনের ইনজেকশনগুলির মধ্যে একটি এবং, এক দশকেরও বেশি বয়সে, এখনও শক্তিশালী হচ্ছে। ইনজেকশন সমস্যা শুধুমাত্র ডাটাবেস ভাষার জন্য বিশেষ নয়। SQL এবং NoSQL এর বাইরে, XPath®, XML পার্সার, SMTP হেডার এবং অন্যান্য প্রসঙ্গে একটি ইনজেকশন ঘটতে পারে। যতদূর পর্যন্ত তীব্রতা যায়, কোড ইনজেকশন রিমোট কোড এক্সিকিউশন (RCE)-এর মতো—গেম ওভার অনুপ্রবেশ পরীক্ষার পর্দা।
আপনার অ্যাপ্লিকেশনগুলিতে NoSQLi সনাক্ত করা এবং প্রতিরোধ করা অত্যাবশ্যক৷ একটি নিরবচ্ছিন্ন ইনজেকশন ভেক্টরকে অনুমতি দেওয়া আপনার ব্যবহারকারী বেসের নিরাপত্তাকে হুমকির মুখে ফেলতে পারে, যা ব্যবসায়িকভাবে বিশ্বাসের সম্ভাব্য ক্ষতির প্রতিনিধিত্ব করে। সৌভাগ্যবশত, আপনি থিমকানিক্স বোঝার পরে, আপনি আপনার পরিষেবাগুলিতে NoSQLi দুর্বলতাগুলি সনাক্ত করতে এবং প্রতিরোধ করতে দৃঢ় পদক্ষেপ নিতে পারেন৷
সাধারণ NoSQLi উদাহরণ
সাধারণত, MongoDB® একটি নিরাপদ BSON ক্যোয়ারী নির্মাণ টুল ব্যবহার করে নির্মিত বাইনারি JSON (BSON) ডেটা গ্রহণ করে। কিন্তু কিছু ক্ষেত্রে, MongoDB আনসারিয়ালাইজড JSON এবং Javascript (JS) এক্সপ্রেশনও গ্রহণ করতে পারে, যেমন $where
অপারেটর। SQL এর মত, $where
অপারেটর NoSQL এ একটি সম্ভাব্য ইনজেকশন প্রবণ। যাইহোক, SQL এর বিপরীতে, NoSQL $where
JS-এ তার শর্তসাপেক্ষ প্রকাশ করে। এর অর্থ হল এটি এসকিউএল যা প্রদান করে তার মধ্যে সীমাবদ্ধ না হয়ে সম্ভাব্য ইনজেকশন প্রশ্নগুলি তৈরি করতে JS-এর সম্পূর্ণ অভিব্যক্তিমূলক শক্তি ব্যবহার করতে পারে৷
পাবলিক রিপোজিটরিতে MongoDB ইনজেকশন স্ট্রিংগুলির তালিকার মধ্য দিয়ে যাওয়া যেমন এটি কিছু সাধারণ ইনজেকশন কৌশলগুলিকে চিত্রিত করে, যা SQL এবং অন্যান্য ভাষায় একই রকম দুর্বলতাগুলির সমান্তরাল। উদাহরণস্বরূপ, কেউ কেউ ক্লাসিক 1 == 1
ব্যবহার করে লুকানো (বা প্রশাসক-স্তরের) সংস্থান এবং সুযোগ-সুবিধাগুলি পড়ার প্রয়াসে একটি সত্য মান ফেরাতে একটি প্রশ্নকে বাধ্য করার জন্য অভিব্যক্তি:
$Where: '1 == 1'
অন্যান্য স্নিপেটগুলি sleep()
ব্যবহার করে একটি অন্ধ ইনজেকশন কৌশল অনুকরণ করে ডিবিকে ধীরগতির করার জন্য ফাংশন এবং একটি পার্শ্ব-প্রতিক্রিয়া তৈরি করে যা—নৈপুণ্যের সাথে ডিজাইন করা ফিল্টারগুলির সাথে-সংবেদনশীল তথ্য গণনা করতে পারে:
';sleep(5000); ';it=new%20Date();do{pt=new%20Date();}while(pt-it<5000);
এবং তারপরে অবশ্যই সাধারণ পুরানো ডেটা এক্সফিল্ট্রেশন রয়েছে, যেখানে ইনজেকশন করা প্রশ্নটি সরাসরি সমালোচনামূলক তথ্য মেলানোর এবং পুনরুদ্ধার করার চেষ্টা করছে।
' && this.password.match(/.*/)//+%00
প্রথম উদাহরণের পরে, বাকি দুটি $where
ব্যবহার করে না অপারেটর. একটি NoSQL DB আক্রমণ করার জন্য আপনার একটি সহজ JS-ফ্লেভারড এক্সপ্রেশনের প্রয়োজন নেই৷
NoSQLi প্রতিরোধ করা
একটি NoSQLi-প্রতিরোধী অ্যাপ্লিকেশন আর্কিটেকচার তৈরি করার চেষ্টা করার সময় অনুসরণ করার জন্য বেশ কয়েকটি সাধারণ কৌশল রয়েছে। এটা আশ্চর্যজনক যে তারা সাধারণ অ্যান্টি-ইনজেকশন পরামর্শ মেনে চলে।
MongoDB / NoSQLi কোন ব্যতিক্রম নয়
কিছু লোক কোড ইনজেকশনটিকে এসকিউএল-নির্দিষ্ট হিসাবে দেখে এবং অন্যান্য প্রসঙ্গে প্রয়োগ করা ইনজেকশন নীতিগুলির বৈধতাকে অবমূল্যায়ন করে। আশা করি, এই পোস্টটি আপনাকে নিশ্চিত করবে যে NoSQLi হচ্ছে বাস্তব মঙ্গোডিবি-র অনুরূপ পোস্টগুলিতে এটি ভালভাবে নথিভুক্ত করা হয়েছে যা আপনার Node.js অ্যাপে NoSQL ইনজেকশন প্রতিরোধ করবে না
অপ্রমাণিত ব্যবহারকারী ডেটা বিশ্বাস করবেন না
নিরাপত্তার কারণে, আপনার ব্যবহারকারীদের বিশ্বাস করা উচিত নয়!
এটি নিরাপত্তার ক্লিচ হিসাবে দেখা যেতে পারে, তবে আশা করি প্রতিটি ইনপুট দূষিত অভিপ্রায়ের সাথে তদন্ত করা হবে। আমাদের $where
উদাহরণ আগে স্পষ্টভাবে ব্যাখ্যা করে যে কেন আমরা $where: unvalidated_input
এর লাইন ধরে কিছু করতে পারি না —আমরা ভাবতে পারি যে আমরা এই সময়ে ব্যবহারকারীর কাছে ফিল্টারটি প্রকাশ করছি (যথেষ্ট খারাপ!) ব্যবহারকারীরা বৃহত্তর ক্যোয়ারীতে অপ্রমাণিত ডেটা প্রবর্তন করছে তা সর্বোত্তম অনুশীলন থেকে দূরে।
ভাষা বা ইন্টিগ্রেশন স্পেসিফিকেশন সম্পর্কে সতর্ক থাকুন
যদিও NoSQLi বিশেষ নয় যখন এটি ইনজেকশন থেকে অনাক্রম্য হওয়ার ক্ষেত্রে আসে (এবং একই ধরণের আক্রমণে ভুগছে), এর অর্থ এই নয় যে NoSQLi-এর জন্য এমনকি ভাষা বা উপাদানগুলির জন্যও অনন্য কৌশল নেই aNoSQL DB এর উপরে নির্মিত। একটি বিশিষ্ট উদাহরণ হল যে $where
থেকে একটি PHP ভেরিয়েবল হিসাবে পাস করার উপায়ে ফর্ম্যাট করা হয়, একটি PHP অ্যাপ্লিকেশনের উপরে তৈরি একটি NoSQL DB এর জন্য এবং $where
-এ সংরক্ষিত ক্ষতিকারক স্ট্রিং ইনজেকশনের সম্ভাব্য পরিস্থিতির জন্য অ্যাকাউন্ট করতে হবে .
উপসংহার
আবার, না NoSQLi এর মানে un-injectable নয়! নোএসকিউএল, এসকিউএল, এসএমটিপি হেডার, এক্সএমএল এবং অন্যান্য প্রসঙ্গের অনুরূপ, কোড ইনজেকশন এবং সাধারণ আচরণ-জিনিস-যেমন-অ্যাপ্লিকেশন-কোড-যা-অ্যাপ্লিকেশন-কোড-এর মতো নয়-এটি আরও অনেক প্রযুক্তির ক্ষতি করে।
আশা করি, এই পোস্টটি আপনাকে NoSQLi সম্পর্কে এবং আপনার ব্যবসার জন্য এর অর্থ কী তা আরও বেশি বোঝার সুযোগ দিয়েছে। এখন, আপনি আপনার কোডকে এমন প্রসেসগুলিতে নিয়ে যেতে পারেন যা এটিকে কম প্রচলিত, কম ব্যাপক এবং কম প্রভাবশালী করে তোলে। আপনার অ্যাপ এবং হোস্টিং পরিবেশ নিরাপদ কিনা তা নিশ্চিত করতে আপনার যদি কিছু MongoDB পরিচালনার পরামর্শের প্রয়োজন হয়, তাহলে Rackspace ObjectRocket-এর অভিজ্ঞ DBA আছে যারা সাহায্য করতে পারে।
Rackspace DBA পরিষেবা সম্পর্কে আরও জানুন৷
৷কোনো মন্তব্য করতে বা প্রশ্ন জিজ্ঞাসা করতে প্রতিক্রিয়া ট্যাব ব্যবহার করুন। এছাড়াও আপনিসেলস চ্যাট এ ক্লিক করতে পারেন৷ এখন চ্যাট করতে এবং কথোপকথন শুরু করতে।