![]() |
![]() |
নির্বাচিত পোস্ট | লগইন | রেজিস্ট্রেশন করুন | রিফ্রেস |
প্রায় প্রতিটি ওয়েব অ্যাপ্লিকেশনেই বিভিন্ন ধরণের ইউজার কন্ট্রোল যেমন টেক্সটবক্স, লিস্টবক্স, ড্রপডাউন ইত্যাদি ব্যবহার করতে হয়। এই কন্ট্রোল গুলোর মাধ্যমে আসলে ব্যবহারকারীকে কিছু পূর্বনির্ধারিত মান সিলেকশন করতে বাধ্য করা হয়। যেমন ধরুন আপনার ওয়েবসাইটে পণ্য ক্রয়ের সময় ইউজার যাতে ১০ এর অধিক পণ্যের জন্য অর্ডার করতে না পারে এজন্য আপনি একটি ড্রপডাউন বক্স ব্যবহার করেছেন। ড্রপডাউনটিতে ১ থেকে ১০ পর্যন্ত সংখ্যাগুলো ক্রমানুসারে সাজিয়ে রেখেছেন। কোনো পণ্য ক্রয় করতে হলে ব্যবহারকারীকে পণ্যের নাম এবং পণ্যের সংখ্যা সিলেক্ট করে অর্ডারটি সাবমিট করতে হবে। এবার মনে করুন একজন ব্যবহারকারী (আ্যাটাকার) ওই ড্রপডাউনটির তৃতীয় মানটি আংশিক পরিবর্তন করে অর্থাৎ ৩ কে -৩ (ঋণাত্নক) লিখে সার্ভারে পাঠাল। যেহেতু আপনি ধরেই নিয়েছেন ব্যবহারকারীকে সবসময় ১ থেকে ১০ এর মধ্যে যে কোনো একটি মান সিলেক্ট করে সার্ভারে পাঠাতে হবে সেহেতু ক্লায়েন্ট সাইডে ভেলিডেশন দেবার পর, আবার সার্ভার সাইডে ভেলিডেশন দেবার প্রয়োজন মনে করেননি। এদিকে পণ্যের দরের (৫,০০০.০০ টাকা) সঙ্গে পণ্যের সংখ্যা (-৩) কে গুণ করে গুণফল (-১৫,০০০.০০ টাকা) ব্যবহারকারীর আকাউন্ট থেকে কেটে নেয়া হয়েছে। ধরি ওই ব্যবহারকারীর একাউন্টে আগে থেকেই ২০,০০০.০০ টাকা জমা ছিল। সূত্রানুযায়ী এখন তার ব্যালেন্স হবে (২০,০০০.০০-(-১৫,০০০.০০)) = ৩৫,০০০.০০ টাকা। এইভাবে একজন আ্যাটাকার ড্রপডাউনের মান পরিবর্তন করে সার্ভারে পোস্ট করার কাজটা খুব সহজেই Paros এর মতো প্রক্সি ব্যবহার করে করতে পারে।
আপনি নিশ্চয়ই এইরকম ভয়াবহ বাগ আপনার প্রিয় আ্যপ্লিকেশনে দেখতে চাইবেন না। শুধু ড্রপডাউন ইউজার কন্ট্রোলই নয় একই ভাবে অন্যান্য ইউজার কন্ট্রোলগুলোকেও হ্যাকিংয়ের হাতিয়ার হিসেবে ব্যবহার করা যেতে পারে। ওয়েবসাইটে বিশেষ কোনো অধিকার কে কিছু নির্দিষ্ট ধরনের ব্যবহারকারীর কাছে অলভ্য করে রাখার জন্য তাৎক্ষনিকভাবে কিছু ইউজার কন্ট্রোলকে নিষ্ক্রিয় (Disable) করে রাখার প্রবণতা ডেভেলপারদের মধ্যে দেখা যায় যা কিনা একজন হ্যাকারকে প্রলুব্ধ করতে পারে। এই বিষয়ে একটি অভিজ্ঞতার কথা বলি।
"অ্যাসোসিয়েশন অব টিচার্স এডুকেশন" নামক একটি প্রতিষ্ঠান তাদের সদস্য ব্যবস্থাপনার জন্য একটি ওয়েব অ্যাপ্লিকেশন ব্যবহার করে থাকে। ওই অ্যাপ্লিকেশনটির অনলাইন পে-মেন্ট ফরম টেস্ট করতে গিয়ে উপরে বর্ণিত বাগের মতো একটি বাগ পেয়ে যাই। পে-মেন্ট ফরমটি দেখতে অনেকটা নিচের ছবিটির মতো ছিল।
এই ফরমটি ব্যবহার করে সদস্যগণ তাদের রেজিষ্ট্রেশনের শেষ ধাপ সম্পন্ন করে থাকেন। এখানে লক্ষ্যনীয় যে, রেজিষ্ট্রেশন ফি এবং সর্বমোট নামক টেক্সটবক্স দুটি নিষ্ক্রিয় করে রাখা হয়েছিল যাতে করে ব্যবহারকারীরা উক্ত বক্স দুটির মান পরিবর্তন না করতে পারেন। মূলত, সাবমিট বাটনে ক্লিক করলে ব্যবহারকারীর দেয়া ক্রেডিট কার্ড সম্পর্কিত তথ্যের গ্রহনযোগ্যতা পরীক্ষা করে ব্যবহারকারীর ক্রেডিট কার্ড থেকে Total নামক টেক্সটবক্সটির মানের সমপরিমান টাকা (এক্ষেত্রে ১,৮৫০.০০ ডলার) কেটে নেয়া হবে এবং ব্যবহারকারীকে প্রতিষ্ঠানটির একজন আজীবন সদস্য হিসেবে বিবেচনা করা হবে। এরপর আমি যেটা করেছিলাম সেটা হলো Total নামক টেক্সটবক্সটির মান পরিবর্তন করে ১.০০ ডলার করে দিয়ে সাবমিট বাটন টিতে ক্লিক করেছিলাম এবং দেখতে পেলাম আমার দেয়া ক্রেডিট কার্ডটি থেকে মাত্র ১ ডলার কেটে নিয়ে আমাকে আজীবন সদস্যপদ দেয়া হয়েছে। লক্ষ্য করুন, নিরাপত্তার কথা ভেবে প্রোগ্রামাররা রেজিষ্ট্রেশন ফি এবং সর্বমোট টেক্সটবক্স দুটিকে নিষ্ক্রিয় করে রেখেছিলেন আর এ জন্য সার্ভার সাইডে কোনরূপ ভেলিডেশন দেয়ার প্রয়োজনীয়তা মনে করেননি।
কোন নিষ্ক্রিয় ইউজার কন্ট্রোল কে সক্রিয় করার জন্য আমরা Web Developer নামক ফায়ারফক্সের এই জনপ্রিয় Add-on টিকে ব্যবহার করতে পারি নিম্নে দেখানো উপায়ে।
আশা করি প্রোগ্রামার বন্ধুরা এতক্ষনে বুঝে গেছেন বিশেষ ক্ষেত্রসমূহে সার্ভার সাইড ভেলিডেশন কতখানি প্রয়োজন। যে সমস্ত টেস্টার বন্ধুরা এই জাতীয় টেস্ট আগে করতেন না তাদেরকে বলবো, আজ থেকে আপনার টেস্ট কেস তালিকায় উপরের টেস্ট কেসটিও যোগ করে নিন। সতর্ক থাকুন, নিরাপদ থাকুন।
২| ১৬ ই ডিসেম্বর, ২০০৮ রাত ৯:৫৩
অপহন্তা বলেছেন: হুমমম। জানা থাকলো, নিজে না বুঝলেও বন্ধুদের কাছ থেকে বুঝে নেয়া যাবে
৩| ১৬ ই ডিসেম্বর, ২০০৮ রাত ১০:০২
নিঃসঙ্গ বলেছেন: হুম বুঝলাম
ভালো পোষ্ট।
৪| ১৬ ই ডিসেম্বর, ২০০৮ রাত ১০:০৩
অ্যালন বলেছেন:
সার্ভার এন্ড ভেলিডেশন এইটা খুবই খুরত্বপূর্ন কাজ..
ধন্যবাদ..
৫| ১৬ ই ডিসেম্বর, ২০০৮ রাত ১০:০৫
রূপক বলেছেন: সার্ভার এন্ডে ভ্যালিডেশন আসলেই খুব গুরুত্বপূর্ন। নতুনরা বিষয়টা হয়তো বুঝবে না। আরেকটু বিস্তারিত বললে ভাল হত। পোস্টে +
৬| ১৬ ই ডিসেম্বর, ২০০৮ রাত ১০:২৭
আট আনা বলেছেন: ভাই কি QA তে কাজ করেন নাকি ? ভবিষ্যতে এরকম পোষ্ট আরো আশা করি।
৭| ১৬ ই ডিসেম্বর, ২০০৮ রাত ১০:৫১
ওয়ার হিরো বলেছেন: চমৎকার কাজ করলেন ভাই।
৮| ১৬ ই ডিসেম্বর, ২০০৮ রাত ১১:৪০
আছহাবুল ইয়ামিন বলেছেন: ফরম ফিল্ড ডিজেবলড থাকলে ব্রাউজার সেই ফিল্ড ডাটা নাও পাঠাতে পারে (যেমন: ফায়ারফক্স পাঠায় না)। অর্থাৎ যে ডেভেলপার ফিল্ড ডিজেবল্ড রেখেছে সে ইতিমধ্যে সেই ফিল্ড ডাটাকে অগ্রাহ্য করছে। সম্ভবত কি ভ্যালু নেয়া হচ্ছে সেটি ব্যবহারকারীকে দেখানোর জন্য এটি করা হয়েছে।
যেকোন ইউজার ইনপুটকেই ভ্যালিডেট করা অবশ্যই উচিত। এমনকি প্রোগ্রামিং এ অনেক সময় ফাংশন/মেথড এর প্যারামিটার ভ্যালুরও ভ্যালিডিটি পরীক্ষা করার প্রয়োজন পড়ে।
৯| ০১ লা ফেব্রুয়ারি, ২০০৯ বিকাল ৪:৫৫
মদন বলেছেন: আমার জানা হলো...
১০| ২৭ শে জুলাই, ২০০৯ বিকাল ৪:১৫
রাজিবুল বলেছেন: খুব ভালো একটা পোষ্ট । বিষয়টা মনে রাখবো ...
©somewhere in net ltd.
১|
১৬ ই ডিসেম্বর, ২০০৮ রাত ৯:৫১
নুর হাসান মুহাম্মদ তানভীর বলেছেন: একটা কথা জানতাম এবং সবাইকে বলি, কখনও আপনার ব্যবহারকারীর ইনপুটের উপর নির্ভর না করা । সার্ভার এন্ড ভেলিডেশন একটা খুবই খুরত্বপূর্ন কাজ ।
ধন্যবাদ সুন্দর লেখার জন্য ।