কমান্ড ইনজেকশন কী: অপারেটিং সিস্টেম কমান্ড এক্সিকিউশন ও সুরক্ষার উপায়
ইউজার ইনপুট সরাসরি সিস্টেম শেলে (sh, bash) চলে গেলে কমান্ড ইনজেকশন ঘটে। শেলের বদলে আর্গুমেন্ট অ্যারে ব্যবহারকারী execFile চালানোই এর স্থায়ী সমাধান।

[!TIP] এক নজরে টেকনিক্যাল সারসংক্ষেপ (Quick Technical Summary):
- মূল ধারণা: ইউজার ইনপুট সরাসরি সিস্টেম শেলে (sh, bash) চলে গেলে কমান্ড ইনজেকশন ঘটে। শেলের বদলে আর্গুমেন্ট অ্যারে ব্যবহারকারী execFile চালানোই এর স্থায়ী সমাধান।
- প্রতিরোধের উপায়: কঠোর ইনপুট ভ্যালিডেশন নিশ্চিত করা, অপ্রয়োজনীয় শেল/ইভাল বন্ধ রাখা এবং সর্বনিম্ন অধিকার নীতি মেনে চলা।
- ভেরিফিকেশন: অ্যাপ্লিকেশন লগ নিয়মিত মনিটর করা এবং স্বয়ংক্রিয় রিগ্রেশন টেস্ট রান করা।
আধুনিক সফটওয়্যার ইঞ্জিনিয়ারিংয়ে সিকিউরিটি নিশ্চিত করতে কোড এবং আর্কিটেকচার উভয় স্তরেই সতর্ক থাকা অত্যন্ত জরুরি।
ক্যারিয়ারের অগ্রগতির পাশাপাশি ডেভেলপারদের আন্তর্জাতিক ক্যারিয়ার গাইডলাইন জানতে পড়ে দেখতে পারেন বাংলাদেশি ডেভেলপারদের জন্য হাই-পেয়িং রিমোট জব গাইড।
টেকনিক্যাল বিশ্লেষণ এবং মূল কারণ
যখন ব্যবহারকারীর কাছ থেকে পাওয়া ইনপুট যাচাই ছাড়া সরাসরি সার্ভারের ইন্টারনাল রিসোর্স বা অপারেটিং সিস্টেমে যায়, তখন এই সিকিউরিটি ঝুঁকি তৈরি হয়:
Client Input ===> Web Handler ===> [Unvalidated Parameter] ===> Internal Resource / OS / Network
নিরাপদ আর্কিটেকচার নিশ্চিত করতে নিচের টেস্টেড রেফারেন্স কোডটি অনুসরণ করুন:
// VULNERABLE: Shell string concatenation
// child_process.exec("ping -c 4 " + userInput);
// SECURE: Direct binary invocation with discrete argument array
const { execFile } = require('node:child_process');
function pingHost(hostAddress, callback) {
// execFile does NOT invoke a shell interpreter, neutralizing ; && | operators
execFile('/bin/ping', ['-c', '4', '--', hostAddress], { timeout: 5000 }, (err, stdout) => {
callback(err, stdout);
});
}
ডিফেন্সিভ কোডিং চেকলিস্ট
১. ইনপুট নরমালাইজেশন: পাথ বা ইউআরএল যাচাই করার পূর্বে ইনপুটকে অবশ্যই নরমালাইজ করে নিন। ২. হোয়াইটলিস্ট চেকিং: ব্লকলিস্টের ওপর নির্ভর না করে শুধু অনুমোদিত ক্যারেক্টার বা ডোমেনের হোয়াইটলিস্ট ব্যবহার করুন। ৩. শেল এক্সিকিউশন পরিহার: শেলের মাধ্যমে কমান্ড না চালিয়ে সরাসরি বাইনারি এক্সিকিউট করুন। ৪. লিস্ট প্রিভিলেজ (Least Privilege): কন্টেইনার এবং সার্ভিসগুলোকে নন-রুট ইউজার হিসেবে রান করুন।
সাধারণ ভুল ধারণা যা এড়িয়ে চলা উচিত
- শুধুমাত্র ডাব্লুএএফ (WAF)-এর ওপর নির্ভর করা এবং সোর্স কোডের বাগ ঠিক না করা।
- ডাবল-এনকোডিং বা ইউনিকোড টেকনিকের মাধ্যমে সহজ রেজেক্স ফিল্টার বাইপাস করা সম্ভব তা ভুলে যাওয়া।
লগ মনিটরিং ও অ্যালার্টিং
ওয়েব সার্ভার ও অ্যাক্সেস লগে কোনো সন্দেহজনক এনকোডেড প্যারামিটার বা অস্বাভাবিক এরর কোড (যেমন ঘনঘন 403 Forbidden) এলে তাৎক্ষণিক অ্যালার্ট সেট করুন।
উপসংহার
নেটওয়ার্ক, রানটাইম এবং অ্যাপ্লিকেশন কোড—প্রতিটি স্তরেই ডিফেন্স-ইন-ডেপথ নিশ্চিত করুন।


