আমি আমার সাইড প্রজেক্টগুলোর নিরাপত্তা অডিট করেছি — যা খুঁজে পেয়েছি তা এখানে দেওয়া হলো
আমি সম্প্রতি আমার সব সাইড প্রজেক্ট অডিট করেছি। আমি আমার FastAPI ব্যাকএন্ড, Telegram বট এবং ওয়েব অ্যাপগুলো পরীক্ষা করেছি। আমি ভেবেছিলাম আমি সতর্ক ছিলাম।
আমি ভুল ছিলাম।
আমি এমন কিছু বাস্তব বাগ (bug) খুঁজে পেয়েছি যা আমি আসলে প্রোডাকশনে পাঠিয়ে দিয়েছিলাম। এগুলো কোনো তাত্ত্বিক সমস্যা নয়। এগুলো হলো দ্রুত কাজ করার চেষ্টায় আমার করা ভুল।
নিচে আমি যে প্রধান সমস্যাগুলো পেয়েছি এবং সেগুলো কীভাবে সমাধান করবেন তা দেওয়া হলো:
- কন্ডিশনাল অথেন্টিকেশন (Conditional Authentication) আমি এমন কোড লিখেছিলাম যা শুধুমাত্র একটি সিক্রেট (secret) থাকলে API কী (key) চেক করত। যদি আমি আমার এনভায়রনমেন্টে সিক্রেটটি সেট করতে ভুলে যেতাম, তবে চেকটি পুরোপুরি বাদ পড়ে যেত। এর ফলে আমার API সবার জন্য উন্মুক্ত হয়ে যেত।
- সমাধান: অথেন্টিকেশনকে কখনোই কন্ডিশনাল করবেন না। যদি সিক্রেটটি না থাকে, তবে অ্যাপটির একটি এরর (error) দেখানো উচিত এবং কাজ বন্ধ করে দেওয়া উচিত।
- Git হিস্ট্রিতে কী (key) লিক হওয়া
আমি আমার Git হিস্ট্রিতে পুরনো API কী খুঁজে পেয়েছি। আমি পরে সেগুলো
.envফাইলে সরিয়ে নিয়েছিলাম, কিন্তু Git আপনার কোডের প্রতিটি পুরনো ভার্সন চিরকাল সংরক্ষণ করে রাখে।
- সমাধান: Git-এ কমিট করা যেকোনো কী-কে অনিরাপদ বা কম্প্রোমাইজড (compromised) হিসেবে গণ্য করুন। এটি অবিলম্বে বাতিল (revoke) করুন। আপনার হিস্ট্রি পরিষ্কার করতে
git-filter-repo-এর মতো টুল ব্যবহার করুন।
- অবশিষ্টাংশ ডিবাগ এন্ডপয়েন্ট (Leftover Debug Endpoints) আমি প্রোডাকশনে এমন কিছু এন্ডপয়েন্ট রেখে দিয়েছিলাম যা আমার ডাটাবেস কনফিগারেশন এবং সিস্টেম সেটিংস প্রদর্শন করত। এগুলো ডেভেলপমেন্টের সময় কাজের হলেও লাইভ বা প্রোডাকশনে অত্যন্ত বিপজ্জনক।
- সমাধান: আপনার ডেপ্লয়মেন্ট চেকলিস্টে ডিবাগ এন্ডপয়েন্ট রিমুভ করার বিষয়টি যুক্ত করুন।
- অতিরিক্ত তথ্যসমৃদ্ধ এরর মেসেজ (Verbose Error Messages) আমি ব্যবহারকারীকে সরাসরি সিস্টেম এরর (raw system errors) দেখাচ্ছিলাম। এই এররগুলো আপনার ফাইল পাথ, ডাটাবেস টাইপ এবং লাইব্রেরি ভার্সন প্রকাশ করে দেয়। একজন আক্রমণকারী আপনার সিস্টেমকে টার্গেট করতে এই তথ্য ব্যবহার করতে পারে।
- সমাধান: নিজের জন্য ইন্টারনালি সম্পূর্ণ এররটি লগ (log) করে রাখুন। ক্লায়েন্টকে শুধুমাত্র একটি সাধারণ "Internal Server Error" মেসেজ প্রদান করুন।
- innerHTML-এর মাধ্যমে XSS
আমি আমার ফ্রন্টএন্ডে ইউজার ডেটা রেন্ডার করতে
innerHTMLব্যবহার করেছিলাম। এটি আক্রমণকারীদের আপনার সাইটে স্ক্রিপ্ট ইনজেক্ট করার সুযোগ দেয়।
- সমাধান: সবসময় ডেটা স্যানিটাইজ (sanitize) করুন অথবা
innerHTML-এর পরিবর্তেtextContentব্যবহার করুন।
- রেট লিমিটিং-এর অভাব (Lack of Rate Limiting) আমার এমন কিছু এন্ডপয়েন্ট ছিল যা কোনো সীমা ছাড়াই দামী AI মডেল কল করত। একজন ব্যবহারকারী কয়েক মিনিটের মধ্যেই বিশাল বিল তৈরি করে ফেলতে পারত।
- সমাধান: অথেন্টিকেশন অননুমোদিত ব্যবহারকারীদের থামায়। রেট লিমিটিং অনুমোদিত ব্যবহারকারীদের আপনার সিস্টেমের অপব্যবহার করা থেকে বিরত রাখে। আপনার এই দুটিরই প্রয়োজন।
- শিথিল CORS সেটিংস (Permissive CORS Settings)
আমি আমার মিডলওয়্যারে
allow_origins=["*"]ব্যবহার করেছিলাম। এটি যেকোনো ওয়েবসাইটকে আপনার API-তে রিকোয়েস্ট পাঠানোর অনুমতি দেয়।
- সমাধান: প্রোডাকশনে শুধুমাত্র আপনার নির্দিষ্ট ডোমেইনগুলোকে অনুমতি দিন।
৮. ফাইল লিকেজ আমি এমন কোড লিখেছিলাম যা অস্থায়ী ফাইল তৈরি করত কিন্তু প্রসেস ক্র্যাশ করলে সেগুলো মুছে ফেলতে ব্যর্থ হতো। এই ফাইলগুলো আপনার সার্ভারে চিরকাল থেকে যায়।
- সমাধান: একটি try-finally ব্লক ব্যবহার করুন যাতে কোনো ত্রুটি ঘটলেও ফাইলগুলো মুছে ফেলা নিশ্চিত করা যায়।
নিরাপত্তা সংক্রান্ত সমস্যাগুলো খুব কমই ইচ্ছাকৃত হয়। এগুলো মূলত "আমি এটি পরে ঠিক করে দেব" বলার পরিণাম। সেই "পরে" আর কখনোই আসে না।
প্রথম দিন থেকেই আপনার কাজের প্রক্রিয়ায় (workflow) নিরাপত্তাকে অন্তর্ভুক্ত করুন। কোড commit করার আগে এবং deploy করার আগে তা পরীক্ষা করে নিন।
উৎস: https://dev.to/justjinoit/i-audited-my-own-side-projects-for-security-issues-heres-what-i-found-1ahb