একজন ডেভেলপার মানে যিনি একটি সিস্টেম তৈরি করেন। আর একজন হ্যাকার? তিনি সেই সিস্টেমটি ভেঙে দেন! এই ভাঙা-গড়ার খেলায় হ্যাকাররা প্রায়শই অলরাউন্ডার হলেও, ডেভেলপাররা সাধারণত শুধু 'ব্যাটিং'টাই সামলান। দুই ভূমিকার মধ্যে পার্থক্য থাকা স্বাভাবিক, তবে আধুনিক সফটওয়্যার ডেভেলপমেন্টের বাস্তবতায় এই দুইয়ের মাঝের দেয়াল দিন দিন পাতলা হয়ে আসছে। এখনকার সফটওয়্যার জগতে শুধু 'ব্যাট' হাতে টিকে থাকা কঠিন। কারণ আপনি যা তৈরি করছেন, কালই তা কেউ না কেউ ভাঙতে চাইবে হয় মজার ছলে, চ্যালেঞ্জ হিসেবে, অথবা কোনো খারাপ উদ্দেশ্যে।
যেমন, কিছুদিন আগে বাংলাদেশের একটি হ্যাকার গ্রুপ আর্মি গলফ ক্লাবের ওয়েবসাইট হ্যাক করে নিয়েছিল। জানেন কী দুর্বলতা ব্যবহার করেছিল তারা? ওয়েবসাইটের ডেভেলপার
.env
ফাইলটি পাবলিক করে রেখেছিলেন। মাত্র কয়েক লাইনের এই কোড ফাঁকির কারণে গলফ ক্লাবের সব সদস্যের ফোন নম্বর, লোকেশন, ছবি সব হ্যাকারদের হাতে চলে গিয়েছিল।
শুধু বাইরের ঘটনার কথা নয়, আমি নিজেও (নাম বলছি না) একবার একটি অনলাইন নিউজ পোর্টালে ঢুকে পড়তে পেরেছিলাম। কীভাবে জানেন? ডেভেলপার ওয়েবসাইটে ইউজার ইনপুট ঠিকমতো স্যানিটাইজ করেননি। যার ফলে, ইউজার ইনপুট ফিল্ড দিয়ে সামান্য পরিবর্তন করেই তাদের সার্ভারে SQL কুয়েরি রান করতে পেরেছিলাম। এরপর কী হলো? তাদের ডাটাবেইস ডাম্প করে নিউজ পোর্টালের অ্যাডমিন প্যানেলের অ্যাক্সেস পেয়ে গেলাম। সেখান থেকে যেকোনো প্রকাশিত খবর এডিট করা যেত বা নতুন পোস্ট যোগ করা যেত। আমি নতুন পোস্ট যোগ করেছিলাম বটে, তবে সেটা ছিল তাদের জানানো যে,
"আপনাদের সাইট ঝুঁকিপূর্ণ, দ্রুত ঠিক করুন!"
কোম্পানিগুলো এখন শুধু একটি সুন্দর সাইট চায় না, তারা সুরক্ষিত সাইটও চায়! সাইটগুলো আর নব্বইয়ের দশকের মতো শুধু কিছু বেসিক HTML, CSS লোড করবে না। সফটওয়্যার ডেভেলপমেন্টে একটি গুরুত্বপূর্ণ নীতি হলো
Secure by Design। এর মানে হলো, শুরু থেকেই এমনভাবে ডিজাইন করতে হবে যেন
নিরাপত্তা বিল্ট-ইন থাকে। এটা যেন পরে যোগ করা কোনো অতিরিক্ত ফিচার না হয়। একজন ডেভেলপার যিনি কেবল নির্মাণের দিকে মনোযোগ দেন, তিনি এমন একজন স্থপতির মতো যিনি ভূমিকম্প বা চোরদের কথা বিবেচনা না করেই একটি বাড়ি ডিজাইন করেন। বাড়িটি দেখতে সুন্দর এবং তার উদ্দেশ্য অনুযায়ী পুরোপুরি কার্যকরী হলেও, এটি মৌলিকভাবে অরক্ষিত। আজকের দ্রুত পরিবর্তনশীল সাইবার বিশ্বে, ডেভেলপারদের শুধু কোড লেখার দক্ষতা থাকলেই চলে না। তাদের জানতে হয় কীভাবে তাদের তৈরি করা সিস্টেমগুলো আক্রমণের শিকার হতে পারে এবং কীভাবে সেগুলো সুরক্ষিত রাখা যায়।
বিশ্বজুড়ে প্রতিদিন অসংখ্য সাইবার আক্রমণ হচ্ছে, যার ফলে কোম্পানিগুলোকে বিশাল আর্থিক ক্ষতির সম্মুখীন হতে হচ্ছে।
SQL Injection,
XSS বা
Broken Authentication এর মতো দুর্বলতাগুলো প্রতিদিনই শত শত ওয়েবসাইটকে বিপন্ন করে তোলে। তবে কিছু সঠিক কোডিং প্র্যাকটিস ও নিরাপত্তা পদ্ধতি অনুসরণ করে খুব সহজেই এই সব দুর্বলতা বন্ধ করা সম্ভব।
যেমন:
// দুর্বল কোড: SQL Injection এর ঝুঁকিতে $sql = "SELECT * FROM users WHERE email = '" . $userInput . "'"; $stmt = $pdo->query($sql);
// দুর্বল কোড: SQL Injection এর ঝুঁকিতে $sql = "SELECT * FROM users WHERE email = '" . $userInput . "'"; $stmt = $pdo->query($sql);
XSS (Cross-Site Scripting) এর দুর্বলতা এবং সমাধান (জাভাস্ক্রিপ্ট উদাহরণ)
// দুর্বল কোড: XSS এর ঝুঁকিতে, ইউজার ইনপুট সরাসরি HTML এ ইনজেক্ট করা হচ্ছে document.getElementById('output').innerHTML = userInput;
// সুরক্ষিত কোড: XSS প্রতিরোধে, ইউজার ইনপুটকে শুধু টেক্সট হিসেবে সেট করা হচ্ছে document.getElementById('output').textContent = userInput;
শুধু আর্থিক ক্ষতিই নয়, একটি সফল সাইবার আক্রমণের ফলে প্রতিষ্ঠানের সুনাম নষ্ট হয়, আইনি জটিলতা তৈরি হয় এবং অপারেশনাল ক্ষতি হয়। গ্রাহকরা তাদের ব্যক্তিগত তথ্যের নিরাপত্তা নিয়ে উদ্বিগ্ন হন এবং অন্য প্ল্যাটফর্মে চলে যেতে পারেন, যা গ্রাহকের আস্থা হারানোর কারণ হয়। বাংলাদেশে এখনো বহু সরকারি ও বেসরকারি ওয়েবসাইট সিকিউর কোডিং না জানার কারণে হ্যাক হচ্ছে। কারণ ডেভেলপাররা নিরাপত্তাকে গুরুত্ব দেন না, এবং সিস্টেম তৈরির পরেই সেটাকে এনাফ মনে করেন। কিন্তু প্রকৃতপক্ষে, সিস্টেম তখনই সম্পন্ন, যখন সেটা নিরাপদ।
একজন নিরাপদ সফটওয়্যার নির্মাতা হিসেবে নিজেকে গড়ে তুলতে চাইলে কিছু গুরুত্বপূর্ণ বিষয় জানা বাধ্যতামূলক। যেমন, ডেভেলপারদের জন্য একটি মাস্ট-নো লিস্ট হলো
OWASP Top 10 — ওয়েব অ্যাপ্লিকেশনে সবচেয়ে সাধারণ এবং বিপজ্জনক দুর্বলতার তালিকা। এই তালিকায় SQL Injection, XSS, Broken Authentication-এর মতো দুর্বলতাগুলো অন্তর্ভুক্ত।
এছাড়াও, আপনি যখন Node, Laravel, Express.js বা Django ব্যবহার করে একটি প্রজেক্ট তৈরি করেন, তখন নিশ্চয়ই প্রচুর লাইব্রেরি বা প্যাকেজ ব্যবহার করেন। কিন্তু জানেন কি, এই থার্ড-পার্টি প্যাকেজগুলোর মধ্যেও অনেক সময় দুর্বলতা থাকে? ২০১৭ সালে Equifax ডেটা ব্রিচ ঘটেছিল একটি আউটডেটেড Apache লাইব্রেরির কারণে। তাই ডেভেলপারদের উচিত নিয়মিত
npm audit,
composer audit বা
snyk টুলের মতো টুল ব্যবহার করে ডিপেন্ডেন্সি স্ক্যান করা।
কিন্তু এই জ্ঞান থাকা সত্ত্বেও অনেক ডেভেলপার ভুল ধারণার কারণে নিরাপত্তাকে অবহেলা করেন। সিকিউরিটির ক্ষেত্রে সবচেয়ে বিপজ্জনক হলো ভুল আত্মবিশ্বাস। অনেক ডেভেলপারই কিছু ভ্রান্ত ধারণায় ভোগেন:
"আমার সাইট ছোট, কেউ হ্যাক করবে না।"
"User input যাচাই করা Backend-এ করাই যথেষ্ট।"
"Production-ready মানেই secure।"
হ্যাকাররা ঠিক সেই জায়গাতেই আঘাত করে যেখানে আপনি ভাবেন,
“এটা তো সমস্যা না।”
এই ভুল ধারণাগুলো দূর করার জন্য প্রয়োজন
Threat Modeling। এটি আপনাকে একজন হ্যাকারের মতো ভাবতে শেখায়,
“আমার অ্যাপ কোথায় দুর্বল হতে পারে?”,
“আমাকে কী কী সুরক্ষা দিতে হবে?” এটি আপনাকে আগাম ঝুঁকি শনাক্ত করতে এবং তা প্রতিরোধ করতে সাহায্য করে। এই প্রক্রিয়ার মাধ্যমে আপনি একটি সিস্টেমকে শুধু কার্যকর নয়, বরং সুরক্ষিত এবং পূর্ণাঙ্গ করে তুলতে পারেন।
এই সকল কারণেই ডেভেলপারদের শুধু ভালো কোড লিখলেই হবে না। তাদের জানতে হবে কীভাবে সেই কোডকে সুরক্ষিত রাখতে হয়। এই সমস্যা সমাধানের জন্য ডেভেলপারদের মধ্যে একটি
সিকিউরিটি-ফার্স্ট মাইন্ডসেট তৈরি হওয়া জরুরি। এর অর্থ হলো, প্রজেক্টের একদম শুরু থেকেই ডিজাইন এবং আর্কিটেকচারে নিরাপত্তার বিষয়টিকে গুরুত্ব দেওয়া। নিরাপত্তা যেন কোনো অতিরিক্ত ফিচার না হয়, বরং এটি যেন সিস্টেমের একটি অবিচ্ছেদ্য অংশ হয়।