Code Injection হল এক ধরনের আক্রমণ যেখানে আক্রমণকারী অ্যাপ্লিকেশনের ইনপুট ডেটার মাধ্যমে দূষিত কোড প্রেরণ করে অননুমোদিত অপারেশন সম্পাদনের জন্য। OWASP, 2024-এর তথ্য অনুসারে, ইনজেকশন তিনটি সবচেয়ে গুরুতর দুর্বলতার মধ্যে রয়েছে। কোড ইনজেকশন প্রক্রিয়া বোঝা ডেভেলপারদের উন্নয়নের প্রথম দিন থেকেই সুরক্ষিত সিস্টেম ডিজাইন করতে দেয়।
মূল বিষয়
Code Injection হল আক্রমণের একটি শ্রেণী যেখানে আক্রমণকারী অবিশ্বস্ত ইনপুট ডেটার মাধ্যমে অ্যাপ্লিকেশনে কার্যকরযোগ্য কোড প্রবেশ করায়। মোবাইল অ্যাপ্লিকেশনে, ইনপুট ক্ষেত্র, ডিপ লিংক, পুশ নোটিফিকেশন, QR কোড এবং ফাইল বিনিময়ের মাধ্যমে আক্রমণ সম্ভব।
OS-স্তরের আক্রমণের বিপরীতে, Code Injection অ্যাপ্লিকেশনের নিজস্ব কোডে যৌক্তিক ত্রুটিগুলি শোষণ করে: এস্কেপিংয়ের অভাব, অসুরক্ষিত স্ট্রিং কনক্যাটেনেশন বা বাহ্যিক ডেটা উৎসের উপর আস্থা। Positive Technologies (2025)-এর রিপোর্ট অনুসারে, আর্থিক খাতে মোবাইল অ্যাপ্লিকেশনে সমস্ত দুর্বলতার 23% ইনজেকশন।
Code Injection-এর প্রধান বিপদ হল সম্পূর্ণ ডেটা আপোস: আক্রমণকারী ডেটাবেস, ডিভাইস ফাইল সিস্টেম বা অন্যান্য ব্যবহারকারীদের অ্যাকাউন্টে অ্যাক্সেস পেতে পারে। পেমেন্ট ডেটা বা চিকিৎসা তথ্য নিয়ে কাজ করা মোবাইল অ্যাপ্লিকেশনের জন্য, ফলাফল গুরুতর হতে পারে।
ডেভেলপারদের ইনজেকশনের ধরন বুঝতে হবে এবং সমস্ত স্তরে — ডেটা ইনপুট থেকে প্রদর্শন এবং সংরক্ষণ পর্যন্ত — সুরক্ষা ব্যবস্থা প্রয়োগ করতে হবে। আধুনিক ফ্রেমওয়ার্ক অন্তর্নির্মিত সুরক্ষা সরঞ্জাম সরবরাহ করে, তবে তাদের ব্যবহারের জন্য সচেতন দৃষ্টিভঙ্গি প্রয়োজন।
Code Injection-এর শ্রেণীবিভাগে মোবাইল ডেভেলপমেন্টের প্রসঙ্গে তিনটি প্রধান ধরনের আক্রমণ অন্তর্ভুক্ত রয়েছে। প্রতিটি প্রকার অ্যাপ্লিকেশনের বিভিন্ন উপাদান শোষণ করে এবং নির্দিষ্ট সুরক্ষা পদ্ধতির প্রয়োজন।
SQL Injection (SQLi) হল স্থানীয় বা দূরবর্তী ডেটাবেসে কোয়েরি প্যারামিটারের মাধ্যমে দূষিত SQL কোডের ইনজেকশন। মোবাইল অ্যাপ্লিকেশনে, দুর্বলতা দেখা দেয় যখন ডিভাইসে SQLite-এর সাথে অসুরক্ষিতভাবে কাজ করা হয় বা স্ট্রিং কনক্যাটেনেশন সহ REST API-তে HTTP অনুরোধ তৈরি করা হয়।
একটি সাধারণ আক্রমণ ভেক্টর হল একটি অনুসন্ধান বা ফিল্টার ক্ষেত্র যার মান সরাসরি SQL কোয়েরিতে প্রতিস্থাপিত হয়। যদি ডেভেলপার প্যারামিটারাইজড কোয়েরির পরিবর্তে কাঁচা কনক্যাটেনেশন ব্যবহার করে, তবে আক্রমণকারী 1' OR '1'='1-এর মতো স্ট্রিং পাঠাতে পারে। OWASP Mobile Top 10 (2024) অনুসারে, SQL Injection অসুরক্ষিত ডেটা স্টোরেজ বিভাগে মোবাইল অ্যাপ্লিকেশনে দ্বিতীয় সবচেয়ে ঘন ঘন গুরুতর দুর্বলতা রয়েছে।
SQLi থেকে সুরক্ষা তিনটি স্তরে নির্মিত: প্যারামিটারাইজড কোয়েরি ব্যবহার (Java-তে PreparedStatement, Android-এ bindArgs সহ rawQuery), ক্লায়েন্ট এবং সার্ভার সাইডে ইনপুট বৈধতা, এবং ন্যূনতম ডেটাবেস বিশেষাধিকার।
মোবাইল অ্যাপ্লিকেশনে XSS আক্রমণ WebView উপাদানের দিকে লক্ষ্য করে — একটি অন্তর্নির্মিত ব্রাউজার যা HTML সামগ্রী প্রদর্শন করে। যদি কোনও অ্যাপ্লিকেশন পরিশোধন ছাড়াই WebView-এ বাহ্যিক উৎস থেকে ডেটা লোড করে, তবে আক্রমণকারী JavaScript কোড ইনজেক্ট করতে পারে যা অ্যাপ্লিকেশন প্রসঙ্গে কার্যকর হয়।
XSS-এর দুটি উপপ্রকার রয়েছে: Stored XSS — দূষিত স্ক্রিপ্ট সার্ভারে সংরক্ষিত হয় এবং প্রতিটি পৃষ্ঠা দর্শনে কার্যকর হয়, এবং Reflected XSS — কোড URL বা POST প্যারামিটারের মাধ্যমে প্রেরণ করা হয় এবং একবার কার্যকর হয়। মোবাইল অ্যাপ্লিকেশনে, মন্তব্য, পর্যালোচনা বা ব্যবহারকারীর সামগ্রীর মাধ্যমে Stored XSS যা WebView-তে অন্যান্য ব্যবহারকারীদের কাছে প্রদর্শিত হয়, বিশেষত বিপজ্জনক।
সুরক্ষার মধ্যে রয়েছে WebView-এ JavaScript নিষ্ক্রিয় করা (যদি প্রয়োজন না হয়), Content Security Policy (CSP) ব্যবহার করা, এবং Android-এর জন্য Jsoup বা iOS-এর জন্য SwiftSoup-এর মতো লাইব্রেরির মাধ্যমে HTML সামগ্রী পরিশোধন করা।
Command Injection হল Runtime.exec(), ProcessBuilder বা NSTask-এর অপরিশোধিত কলের মাধ্যমে ডিভাইসে সিস্টেম কমান্ডের কার্যকর করা। মোবাইল অ্যাপ্লিকেশনে, আক্রমণ সম্ভব যদি অ্যাপ্লিকেশন শেল কমান্ড বা ক্রিয়া সহ Intent-এ ব্যবহারকারীর ডেটা প্রেরণ করে।
সবচেয়ে দুর্বল ক্ষেত্রগুলি হল ফাইল রূপান্তর ফাংশন, মিডিয়া প্রক্রিয়াকরণ (ffmpeg, ImageMagick) এবং তৃতীয় পক্ষের লাইব্রেরি ইনস্টলেশন। আক্রমণকারী পাইপ বা রিডাইরেক্ট ক্যারেক্টার সহ একটি কমান্ড পাঠাতে পারে যা ডিভাইসে ইচ্ছামতো কোড কার্যকর করে। Android স্যান্ডবক্সের মাধ্যমে শেল অ্যাক্সেস আংশিকভাবে সীমাবদ্ধ করে, তবে রুট অ্যাক্সেস বা PrivEsc শোষণ সহ অ্যাপ্লিকেশন আপোস করা যেতে পারে।
প্রস্তাবিত সুরক্ষা হল ব্যবহারকারীর ডেটা প্রক্রিয়াকরণের জন্য Runtime.exec()-এর সম্পূর্ণ পরিত্যাগ, সুরক্ষিত API সহ লাইব্রেরি ব্যবহার এবং বাহ্যিক প্রক্রিয়াগুলির কঠোর বিচ্ছিন্নতা।
Code Injection-এর প্রক্রিয়া আর্কিটেকচারাল পার্থক্যের কারণে Android এবং iOS প্ল্যাটফর্মে ভিন্ন। Android-এ, ইনজেকশনগুলি প্রায়শই Intent-এর সাথে যুক্ত — একটি সিস্টেম বার্তা যা অ্যাপ্লিকেশন উপাদানগুলির মধ্যে প্রেরিত হয়। আক্রমণকারী SQL কোড বা শেল কমান্ড ধারণকারী অতিরিক্ত ডেটা সহ একটি দূষিত Intent পাঠাতে পারে।
iOS-এ, আক্রমণগুলি প্রায়শই ইন্টারপ্রসেস কমিউনিকেশন (XPC) পদ্ধতি, ইউনিভার্সাল লিংক এবং URL Scheme হ্যান্ডলিংয়ের মাধ্যমে ঘটে। একটি অ্যাপ্লিকেশন যা বৈধতা ছাড়াই বাহ্যিক উৎস থেকে ডেটা গ্রহণ করে, ইনজেকশনের জন্য দুর্বল হয়ে পড়ে। Apple Security Research (2025) অনুসারে, iOS অ্যাপ্লিকেশনে প্রায় 12% দুর্বলতা অপর্যাপ্ত ইনপুট ডেটা পরিশোধনের সাথে সম্পর্কিত।
উভয় প্ল্যাটফর্মের জন্য একটি সাধারণ ভেক্টর হল স্থানীয় স্টোরেজ (SQLite, Realm, UserDefaults) এর মাধ্যমে আক্রমণ। যদি কোনও দূষিত অ্যাপ্লিকেশন একটি শেয়ার্ড ডিরেক্টরিতে ডেটা লিখতে পারে, তবে এটি কোড ইনজেক্ট করতে পারে যা পড়ার সময় লক্ষ্য অ্যাপ্লিকেশন দ্বারা কার্যকর হবে।
একটি সাধারণ আক্রমণ প্রক্রিয়ায় তিনটি ধাপ অন্তর্ভুক্ত: পুনরুদ্ধার — অ্যাপ্লিকেশনের ইনপুট পয়েন্টগুলির বিশ্লেষণ (ফর্ম, ডিপ লিংক, ফাইল), ইনজেকশন — পাওয়া ইনপুট পয়েন্টের মাধ্যমে দূষিত পেলোড সরবরাহ, এবং শোষণ — ডেটা বা কার্যকারিতায় অ্যাক্সেস পেতে ইনজেকশনের কার্যকর করা। এই চক্রটি বোঝা ডেভেলপারদের প্রতিটি ধাপে সুরক্ষা ডিজাইন করতে সহায়তা করে।
আসুন Android-এর জন্য Kotlin এবং iOS-এর জন্য Swift-এ Code Injection-এর নির্দিষ্ট উদাহরণ দেখি। প্রতিটি উদাহরণ একটি দুর্বল প্যাটার্ন এবং তার সুরক্ষিত বিকল্প দেখায়।
প্রথম উদাহরণটি ব্যবহারকারীর ইনপুটের সাথে কোয়েরি স্ট্রিংয়ের সরাসরি কনক্যাটেনেশন। userInput = "1' OR '1'='1" মানের সাথে, কোয়েরিটি একটির পরিবর্তে টেবিলের সমস্ত সারি ফেরত দেয়।
// দুর্বল: স্ট্রিং কনক্যাটেনেশন
fun getUserById(userInput: String): List<User> {
val db = openOrCreateDatabase()
val query = "SELECT * FROM users WHERE id = " + userInput
return db.rawQuery(query, null)
}
// নিরাপদ: প্যারামিটারাইজড কোয়েরি
fun getUserByIdSafe(userInput: String): List<User> {
val db = openOrCreateDatabase()
val query = "SELECT * FROM users WHERE id = ?"
return db.rawQuery(query, arrayOf(userInput))
}
দ্বিতীয় উদাহরণটি WKWebView-এ ব্যবহারকারীর HTML সামগ্রীর ভুল এবং সঠিক লোডিং প্রদর্শন করে। SwiftSoup ব্যবহার রেন্ডারিংয়ের আগে দূষিত স্ক্রিপ্ট সরাতে দেয়।
// দুর্বল: সরাসরি HTML লোডিং
let webView = WKWebView()
let html = "<div>\(userComment)</div>"
webView.loadHTMLString(html, baseURL: nil)
// নিরাপদ: SwiftSoup এর মাধ্যমে পরিশোধন
import SwiftSoup
let cleanHtml = try SwiftSoup.clean(
userComment,
Whitelist.basic()
)
webView.loadHTMLString(cleanHtml, baseURL: nil)
তৃতীয় উদাহরণটি ব্যবহারকারীর আর্গুমেন্ট সহ Runtime.exec() কল করার বিপদ এবং একটি নির্দিষ্ট API সহ লাইব্রেরির মাধ্যমে সুরক্ষিত বিকল্প।
// দুর্বল: ব্যবহারকারী ইনপুট সহ শেল কমান্ড
fun convertVideo(inputPath: String) {
val cmd = "ffmpeg -i $inputPath -vcodec libx264 output.mp4"
Runtime.getRuntime().exec(cmd)
}
// নিরাপদ: আর্গুমেন্ট বিচ্ছিন্নতা
fun convertVideoSafe(inputPath: String) {
val cmd = listOf(
"ffmpeg", "-i", inputPath,
"-vcodec", "libx264", "output.mp4"
)
ProcessBuilder(cmd).start()
}
Code Injection থেকে সুরক্ষার জন্য কোড, অবকাঠামো এবং উন্নয়ন প্রক্রিয়াগুলি কভার করে একটি পদ্ধতিগত দৃষ্টিভঙ্গি প্রয়োজন। কোনও একক পদ্ধতি সম্পূর্ণ সুরক্ষার নিশ্চয়তা দেয় না — অনুশীলনের সংমিশ্রণ প্রয়োজন।
প্রথম স্তর হল প্রতিরোধ: সমস্ত ইনপুট ডেটার কঠোর বৈধতা। প্রতিটি ক্ষেত্র যা অ্যাপ্লিকেশন ব্যবহারকারী, অন্য অ্যাপ্লিকেশন বা নেটওয়ার্ক থেকে গ্রহণ করে, তার ধরন, দৈর্ঘ্য এবং বিন্যাসের জন্য পরীক্ষা করা উচিত। OWASP ESAPI-এর মতো লাইব্রেরি সাধারণ পরিস্থিতির জন্য প্রস্তুত বৈধতাকারী সরবরাহ করে।
দ্বিতীয় স্তর হল পরিশোধন এবং এস্কেপিং: SQL কোয়েরি, HTML টেমপ্লেট বা শেল কমান্ডে ব্যবহারের আগে ডেটা রূপান্তর করা। প্যারামিটারাইজড কোয়েরি SQL Injection সম্পূর্ণরূপে নির্মূল করে, এবং HTML এস্কেপিং XSS প্রতিরোধ করে। Android-এ, SQLite-এর সাথে কাজ করার জন্য Room ব্যবহার করুন — একটি ORM যা স্বয়ংক্রিয়ভাবে bind প্যারামিটার প্রয়োগ করে।
তৃতীয় স্তর হল বিশেষাধিকার হ্রাস: অ্যাপ্লিকেশনকে ন্যূনতম প্রয়োজনীয় অনুমতি নিয়ে কাজ করা উচিত। ডেটাবেস, ফাইল সিস্টেম এবং ইন্টারপ্রসেস যোগাযোগের জন্য ন্যূনতম বিশেষাধিকারের নীতি ব্যবহার করুন। iOS অ্যাপ্লিকেশন স্যান্ডবক্সের মাধ্যমে এই নীতি বাস্তবায়ন করে, এবং Android অনুমতি মডেল এবং প্রক্রিয়া বিচ্ছিন্নতার মাধ্যমে।
চতুর্থ স্তর হল মনিটরিং এবং প্রতিক্রিয়া: সন্দেহজনক অপারেশন লগিং, অসঙ্গতি সনাক্তকরণ এবং আক্রমণের পুনরাবৃত্তিতে স্বয়ংক্রিয় ব্লকিং। Firebase App Check-এর মতো সরঞ্জাম আপোসকৃত ক্লায়েন্ট থেকে ব্যাকএন্ডে জাল অনুরোধ সনাক্ত করতে সহায়তা করে। RASP (Runtime Application Self-Protection)-এর একীকরণ রানটাইমে ইনজেকশন ব্লক করার অনুমতি দেয়।
Google Project Zero (2025)-এর গবেষণা অনুসারে, এই চারটি স্তরের সংমিশ্রণ Code Injection-এর সফল আক্রমণের ঝুঁকি 94% কমিয়ে দেয়। ডেভেলপারদের দুর্বলতা আবিষ্কারের পরে যুক্ত করার পরিবর্তে আর্কিটেকচার ডিজাইন পর্যায়ে সুরক্ষা ব্যবস্থা বাস্তবায়নের সুপারিশ করা হয়।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
Code Injection হল যখন আক্রমণকারী অ্যাপ্লিকেশনে ডেটা না পাঠিয়ে কোড পাঠায়। উদাহরণস্বরূপ, ব্যবহারকারীর নামের পরিবর্তে, তারা একটি SQL কোয়েরি পাঠায় যা অ্যাপ্লিকেশন তার ডেটাবেসে কার্যকর করে, অন্যান্য রেকর্ডে অ্যাক্সেস লাভ করে।
SQL Injection SQL কোয়েরির মাধ্যমে ডেটাবেস আক্রমণ করে, রেকর্ড পড়া এবং পরিবর্তনের অনুমতি দেয়। XSS ব্যবহারকারীর ব্রাউজারে নির্বাহের জন্য WebView-এ JavaScript কোড ইনজেক্ট করে। ভিন্ন লক্ষ্য, কিন্তু সাধারণ প্রক্রিয়া — অপর্যাপ্ত ইনপুট বৈধতা।
SQLite-এর জন্য প্যারামিটারাইজড কোয়েরি সহ Room ব্যবহার করুন, WebView-এ JavaScript নিষ্ক্রিয় করুন, কোড অস্পষ্টতার জন্য ProGuard/R8 প্রয়োগ করুন, এবং কখনও ব্যবহারকারীর ডেটা Runtime.exec()-এ পাঠাবেন না। সুরক্ষা প্যাচ সহ নিয়মিত নির্ভরতা আপডেট করুন।
হ্যাঁ, iOS অ্যাপ্লিকেশনগুলি Core Data (কাঁচা কোয়েরি) মাধ্যমে SQL Injection, WKWebView মাধ্যমে XSS এবং Process মাধ্যমে Command Injection-এর জন্য দুর্বল। iOS স্যান্ডবক্স আক্রমণের পরিধি সীমাবদ্ধ করে তবে এটি সম্পূর্ণরূপে প্রতিরোধ করে না। ব্যবহারের আগে সর্বদা ডেটা পরিশোধন করুন।
সোর্স কোড স্ক্যানিংয়ের জন্য SAST (Static Analysis) — SonarQube, MobSF বা QARK-এর মতো সরঞ্জাম ব্যবহার করুন। অতিরিক্তভাবে, চলমান অ্যাপ্লিকেশন পরীক্ষার জন্য DAST স্ক্যানার ব্যবহার করুন: সমস্ত ইনপুট ক্ষেত্রে বিশেষভাবে তৈরি স্ট্রিং (‘, OR 1=1, <script>) প্রবেশ করান।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন