⚡Shadow Academy
একাডেমি / অধ্যায় 54
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
অধ্যায় 54 / ১০০গল্প · ল্যাব · কুইজ

অধ্যায় 54: File Upload & Path Traversal

Upload validation, storage isolation ও path normalization.

এই অধ্যায়ে কী শিখবে

⏱ আনুমানিক সময়: ১৫–২০ মিনিট · পূর্বশর্ত: আগের অধ্যায়ের ধারণা

০ / ১০০ অধ্যায়চালিয়ে যাও: অধ্যায় 55

অগ্রগতি এই browser-এ স্থানীয়ভাবে সংরক্ষিত হবে।

গল্প: অধ্যায় 54: File Upload & Path Traversal

কমিউনিটি পত্রিকায় মায়া ছবি upload-এর ফর্ম বানিয়েছিল। filename আর extension দেখে বিশ্বাস করলে ফাইল ভুল জায়গায় যেতে পারে বুঝে সে server-side validation, random নাম ও webroot-এর বাইরের storage পরিকল্পনা করল। বৃষ্টি ম্যাম বললেন, “সৌরভ সোনা, আগে সমস্যাটাকে ছোট করে বুঝি—কোন সম্পদ, কার অনুমতি, আর কোন সীমার মধ্যে কাজ?” সৌরভ বোর্ডে একটি data-flow এঁকে সম্ভাব্য ভুলের জায়গা চিহ্নিত করল। তারা বাস্তব কোনো account বা website-এ হাত না দিয়ে synthetic উদাহরণে hypothesis যাচাই করল।

বৃষ্টি ম্যাম জিজ্ঞেস করলেন, “সৌরভ, গল্পের চরিত্রটি কোন সীমা পেরোতে দিচ্ছিল?” তারা বোর্ডে asset, actor, trust boundary আর expected outcome লিখল। ভুলটি শুধু একটি tool-এর সমস্যা নয়; server কী অনুমতি দিচ্ছে, আর সেই সিদ্ধান্ত যাচাই করা যায় কি না—সেটিই মূল প্রশ্ন।

তারপর তারা বাস্তব service ছুঁয়ে না দেখে synthetic record-এ একই decision অনুশীলন করল। প্রথমে স্বাভাবিক অনুমোদিত flow, তারপর ভুল পরিচয়/invalid state, শেষে fix-এর পর retest। বৃষ্টি ম্যাম বললেন, “সোনা, নিরাপদ শেখা মানে কেবল সমস্যা দেখানো নয়—সীমা মেনে প্রতিরক্ষা প্রমাণ করাও।”

বৃষ্টি ম্যাম সহজ করে বলছে

সমস্যা: path traversal বা active content web server থেকে চালু/পড়া যেতে পারে।

মূল নিয়ম: server-generated random name ও webroot-এর বাইরের quarantined storage। এই নিয়মটি Upload validation, storage isolation ও path normalization.-এর সঙ্গে মিলিয়ে threat boundary-তে enforce করো; শুধু UI, client-side check বা model instruction-এ ভরসা কোরো না। প্রত্যাখ্যানের কারণ user-কে নিরাপদভাবে জানাও, আর diagnosis-এর জন্য সীমিত redacted event রাখো।

নিরাপদ defensive উদাহরণ

নিচের snippet-টি illustrative pseudocode। এটি কোনো বাইরের target-এ পরীক্ষা চালায় না; control কীভাবে server-side-এ বসে তা দেখায়।

name = random_id() + detected_extension
store_outside_webroot(name)
serve_as_attachment(name)

Review checklist: explicit scope, least privilege, malformed/unauthorized negative case, privacy-safe logging এবং post-fix retest।

আজকের অনুশীলন

ছাত্রের ছবি upload-এ filename ../../ দিলে storage কোথায় যাবে? কেবল isolated mock বা লিখিত অনুমতিপ্রাপ্ত lab-এ চেষ্টা করো। expected result এবং deny case লিখে রাখো।

প্রতিরক্ষা checkpoint

server-generated random name ও webroot-এর বাইরের quarantined storage Server-side type checks, random names, storage outside webroot, least privilege. remediation-এর owner ও retest ফলাফলও নথিভুক্ত করো।

Review: owner, telemetry, failure behavior ও retest ফলাফল নথিভুক্ত করো।

Portfolio note

Scope, synthetic setup, পর্যবেক্ষণ, ঝুঁকি, remediation ও retest লিখে রাখো। secret বা ব্যক্তিগত তথ্য যোগ কোরো না।

বিশ্বস্ত reference

আরও পড়ার জন্য প্রতিষ্ঠিত security standards ও guidance দেখো; প্রতিটি lab অনুমোদিত বা synthetic environment-এ করো।