Django ওয়েব অ্যাপ্লিকেশনে কমান্ড ইনজেকশন ভালনারেবিলিটি প্রতিরোধের উপায়
এক নজরে টেকনিক্যাল সারসংক্ষেপ (Quick Technical Summary): মূল ধারণা: Django অ্যাপে os.system() বা shell=True পরিহার করুন।

[!TIP] এক নজরে টেকনিক্যাল সারসংক্ষেপ (Quick Technical Summary):
- মূল ধারণা: Django অ্যাপে os.system() বা shell=True পরিহার করুন। আর্গুমেন্ট লিস্টসহ subprocess.run() ব্যবহার করুন এবং সম্ভব হলে এক্সটার্নাল শেলের বদলে পাইথন লাইব্রেরি ব্যবহার করুন।
- প্রতিরোধের উপায়: কঠোর ইনপুট ভ্যালিডেশন নিশ্চিত করা, অপ্রয়োজনীয় শেল/ইভাল বন্ধ রাখা এবং সর্বনিম্ন অধিকার নীতি মেনে চলা।
- ভেরিফিকেশন: অ্যাপ্লিকেশন লগ নিয়মিত মনিটর করা এবং স্বয়ংক্রিয় রিগ্রেশন টেস্ট রান করা।
আধুনিক সফটওয়্যার ইঞ্জিনিয়ারিংয়ে সিকিউরিটি নিশ্চিত করতে কোড এবং আর্কিটেকচার উভয় স্তরেই সতর্ক থাকা অত্যন্ত জরুরি।
ক্যারিয়ারের অগ্রগতির পাশাপাশি ডেভেলপারদের আন্তর্জাতিক ক্যারিয়ার গাইডলাইন জানতে পড়ে দেখতে পারেন বাংলাদেশি ডেভেলপারদের জন্য হাই-পেয়িং রিমোট জব গাইড।
টেকনিক্যাল বিশ্লেষণ এবং মূল কারণ
যখন ব্যবহারকারীর কাছ থেকে পাওয়া ইনপুট যাচাই ছাড়া সরাসরি সার্ভারের ইন্টারনাল রিসোর্স বা অপারেটিং সিস্টেমে যায়, তখন এই সিকিউরিটি ঝুঁকি তৈরি হয়:
Client Input ===> Web Handler ===> [Unvalidated Parameter] ===> Internal Resource / OS / Network
নিরাপদ আর্কিটেকচার নিশ্চিত করতে নিচের টেস্টেড রেফারেন্স কোডটি অনুসরণ করুন:
# views.py - Safe subprocess invocation in Django
from django.http import JsonResponse
import subprocess
import shutil
def generate_pdf_report(request):
doc_id = request.GET.get('id', '')
if not doc_id.isdigit():
return JsonResponse({'error': 'Invalid parameter'}, status=400)
# Resolve executable safely
binary = shutil.which('weasyprint')
res = subprocess.run([binary, f'/reports/{doc_id}.html', f'/output/{doc_id}.pdf'], capture_output=True, timeout=10, shell=False)
return JsonResponse({'status': 'generated'})
ডিফেন্সিভ কোডিং চেকলিস্ট
১. ইনপুট নরমালাইজেশন: পাথ বা ইউআরএল যাচাই করার পূর্বে ইনপুটকে অবশ্যই নরমালাইজ করে নিন। ২. হোয়াইটলিস্ট চেকিং: ব্লকলিস্টের ওপর নির্ভর না করে শুধু অনুমোদিত ক্যারেক্টার বা ডোমেনের হোয়াইটলিস্ট ব্যবহার করুন। ৩. শেল এক্সিকিউশন পরিহার: শেলের মাধ্যমে কমান্ড না চালিয়ে সরাসরি বাইনারি এক্সিকিউট করুন। ৪. লিস্ট প্রিভিলেজ (Least Privilege): কন্টেইনার এবং সার্ভিসগুলোকে নন-রুট ইউজার হিসেবে রান করুন।
সাধারণ ভুল ধারণা যা এড়িয়ে চলা উচিত
- শুধুমাত্র ডাব্লুএএফ (WAF)-এর ওপর নির্ভর করা এবং সোর্স কোডের বাগ ঠিক না করা।
- ডাবল-এনকোডিং বা ইউনিকোড টেকনিকের মাধ্যমে সহজ রেজেক্স ফিল্টার বাইপাস করা সম্ভব তা ভুলে যাওয়া।
লগ মনিটরিং ও অ্যালার্টিং
ওয়েব সার্ভার ও অ্যাক্সেস লগে কোনো সন্দেহজনক এনকোডেড প্যারামিটার বা অস্বাভাবিক এরর কোড (যেমন ঘনঘন 403 Forbidden) এলে তাৎক্ষণিক অ্যালার্ট সেট করুন।
উপসংহার
নেটওয়ার্ক, রানটাইম এবং অ্যাপ্লিকেশন কোড—প্রতিটি স্তরেই ডিফেন্স-ইন-ডেপথ নিশ্চিত করুন।


