𝗦𝗲𝗰𝘂𝗿𝗶𝘁𝘆 𝗔𝘂𝗱𝗶𝘁 𝗥𝗲𝘀𝘂𝗹𝘁𝘀: 𝗪𝗵𝘆 𝗜 𝗳𝗲𝗹 𝗲𝗺𝗯𝗮𝗿𝗿𝗮𝘀𝘀𝗲𝗱
আমি সম্প্রতি আমার সমস্ত সাইড প্রজেক্টের ওপর একটি সিকিউরিটি অডিট চালিয়েছি। এর মধ্যে রয়েছে আমার FastAPI ব্যাকএন্ড, Telegram বট, PWA এবং Streamlit অ্যাপ।
আমি ভেবেছিলাম আমি সতর্ক হওয়ার কারণে আমার কোড নিরাপদ। আমি ভুল ছিলাম।
আমি এই বাস্তব প্রোডাকশন বাগগুলো শেয়ার করছি যাতে আপনি এগুলো এড়িয়ে চলতে পারেন। এগুলো কোনো তাত্ত্বিক চেকলিস্ট নয়। এগুলো সেই ভুল যা আমি বাস্তবে করেছি।
কন্ডিশনাল অথেন্টিকেশন ফাঁদ আমি এমন কোড লিখেছিলাম যা ভেরিফাই করার আগে চেক করত যে একটি API secret আছে কি না। যদি এনভায়রনমেন্ট ভেরিয়েবলটি না থাকতো, তবে চেকটি পুরোপুরি বাদ পড়ে যেত। এর মানে হলো আমার পুরো API সবার জন্য উন্মুক্ত ছিল। নিয়ম: যদি কোনো সিক্রেট মিসিং থাকে, তবে 500 এরর দিয়ে কঠোরভাবে ফেল (fail) করুন। কখনোই অথেন্টিকেশন স্কিপ করবেন না।
Git হিস্ট্রি লিক আমি একবার দ্রুত পরীক্ষার জন্য একটি API key হার্ডকোড করেছিলাম। পরে আমি এটি একটি .env ফাইলে সরিয়ে নিয়েছিলাম এবং ভেবেছিলাম সমস্যাটি সমাধান হয়ে গেছে। কিন্তু Git সবকিছু মনে রাখে। যে কেউ আমার কমিট হিস্ট্রিতে সেই কী (key) খুঁজে পেতে পারে। নিয়ম: আপনি যদি কোনো কী (key) কমিট করেন, তবে ধরে নিন সেটি চুরি হয়ে গেছে। অবিলম্বে সেটি পরিবর্তন (rotate) করুন। আপনার হিস্ট্রি পরিষ্কার করতে git-filter-repo ব্যবহার করুন।
ডিবাগ এন্ডপয়েন্ট লিক সমস্যা সমাধানের সুবিধার জন্য আমি প্রোডাকশনে একটি
/debug/configএন্ডপয়েন্ট রেখে দিয়েছিলাম। এটি আমার ডাটাবেস URL এবং এনভায়রনমেন্ট সেটিংস প্রকাশ করে দিচ্ছিল। নিয়ম: ডেপ্লয়মেন্টের আগে সমস্ত ডিবাগ এন্ডপয়েন্ট সরিয়ে ফেলুন। পরিবর্তে লগ (logs) ব্যবহার করুন।এরর-এর মাধ্যমে সিস্টেম ইনফো লিক করা আমি আমার এরর রেসপন্সে
str(e)ব্যবহার করেছিলাম। এটি সরাসরি ব্যবহারকারীর কাছে ডাটাবেস এরর এবং ফাইল পাথ পাঠিয়ে দিচ্ছিল। আক্রমণকারীরা আপনার ইনফ্রাস্ট্রাকচার ম্যাপ করার জন্য এটি ব্যবহার করে। নিয়ম: বিস্তারিত এররটি নিজের জন্য লগ করুন। ক্লায়েন্টকে একটি সাধারণ "Internal Server Error" পাঠান।ফ্রন্টএন্ডে XSS ঝুঁকি আমি ইউজার কন্টেন্ট রেন্ডার করার জন্য
innerHTMLব্যবহার করেছিলাম। এটি অন্যান্য ব্যবহারকারীর ব্রাউজারে স্ক্রিপ্ট চালানোর সুযোগ করে দিয়েছিল। নিয়ম: সবসময় HTML এস্কেপ (escape) করুন।innerHTML-কে যেকোনো কোড এক্সিকিউট করার মাধ্যম হিসেবে বিবেচনা করুন।রেট লিমিট না থাকা আমার এমন কিছু এন্ডপয়েন্ট ছিল যা কোনো সীমা ছাড়াই দামী AI মডেল কল করত। একটি মাত্র লুপ বা একটি চুরি হওয়া কী (key) আমার শত শত ডলারের ক্ষতি করতে পারত। নিয়ম: অথেন্টিকেশন অননুমোদিত ব্যবহারকারীদের থামায়। রেট লিমিটিং অনুমোদিত ব্যবহারকারীদের আপনার সিস্টেমের অপব্যবহার করা থেকে থামায়।
শিথিল CORS পলিসি আমি প্রোডাকশনে
allow_origins=["*"]ব্যবহার করেছিলাম। এটি যেকোনো সাইটকে আপনার API-তে রিকোয়েস্ট করার অনুমতি দেয়। নিয়ম: শুধুমাত্র আপনার নির্দিষ্ট ফ্রন্টএন্ড ডোমেইনকে অনুমতি দিন।The Temporary File Leak If my code crashed while processing a file, the temporary file stayed on the disk forever. This wastes space and leaks sensitive data. Rule: Use try-finally blocks to ensure files are deleted even if an error occurs.
My new mandatory checklist:
Before coding: • Create a .gitignore • Create a .env.example
For every endpoint: • Add authentication • Use generic error messages • Add rate limits to expensive tasks
Before committing: • Scan for secrets in your diff
Before deploying: • Run security audits on your dependencies
Security issues do not happen by accident. They happen because of "TODO" comments and "temporary" fixes that stay in production forever.
Fixing a bug is boring. Fixing a breach is expensive.