Friday, December 5, 2008

সার্ভার সাইড ভেলিডেশনের প্রয়োজনীয়তা - ১

প্রায় প্রতিটি ওয়েব অ্যাপ্লিকেশনেই বিভিন্ন ধরণের ইউজার কন্ট্রোল যেমন টেক্সটবক্স, লিস্টবক্স, ড্রপডাউন ইত্যাদি ব্যবহার করতে হয়। এই কন্ট্রোল গুলোর মাধ্যমে আসলে ব্যবহারকারীকে কিছু পূর্বনির্ধারিত মান সিলেকশন করতে বাধ্য করা হয়। যেমন ধরুন আপনার ওয়েবসাইটে পণ্য ক্রয়ের সময় ইউজার যাতে ১০ এর অধিক পণ্যের জন্য অর্ডার করতে না পারে এজন্য আপনি একটি ড্রপডাউন বক্স ব্যবহার করেছেন। ড্রপডাউনটিতে ১ থেকে ১০ পর্যন্ত সংখ্যাগুলো ক্রমানুসারে সাজিয়ে রেখেছেন। কোনো পণ্য ক্রয় করতে হলে ব্যবহারকারীকে পণ্যের নাম এবং পণ্যের সংখ্যা সিলেক্ট করে অর্ডারটি সাবমিট করতে হবে। এবার মনে করুন একজন ব্যবহারকারী (আ্যাটাকার) ওই ড্রপডাউনটির তৃতীয় মানটি আংশিক পরিবর্তন করে অর্থাৎ ৩ কে -৩ (ঋণাত্নক) লিখে সার্ভারে পাঠাল। যেহেতু আপনি ধরেই নিয়েছেন ব্যবহারকারীকে সবসময় ১ থেকে ১০ এর মধ্যে যে কোনো একটি মান সিলেক্ট করে সার্ভারে পাঠাতে হবে সেহেতু ক্লায়েন্ট সাইডে ভেলিডেশন দেবার পর, আবার সার্ভার সাইডে ভেলিডেশন দেবার প্রয়োজন মনে করেননি। এদিকে পণ্যের দরের (৫,০০০.০০ টাকা) সঙ্গে পণ্যের সংখ্যা (-৩) কে গুণ করে গুণফল (-১৫,০০০.০০ টাকা) ব্যবহারকারীর আকাউন্ট থেকে কেটে নেয়া হয়েছে। ধরি ওই ব্যবহারকারীর একাউন্টে আগে থেকেই ২০,০০০.০০ টাকা জমা ছিল। সূত্রানুযায়ী এখন তার ব্যালেন্স হবে (২০,০০০.০০-(-১৫,০০০.০০)) = ৩৫,০০০.০০ টাকা। এইভাবে একজন আ্যাটাকার ড্রপডাউনের মান পরিবর্তন করে সার্ভারে পোস্ট করার কাজটা খুব সহজেই Paros এর মতো প্রক্সি ব্যবহার করে করতে পারে।

আপনি নিশ্চয়ই এইরকম ভয়াবহ বাগ আপনার প্রিয় আ্যপ্লিকেশনে দেখতে চাইবেন না। শুধু ড্রপডাউন ইউজার কন্ট্রোলই নয় একই ভাবে অন্যান্য ইউজার কন্ট্রোলগুলোকেও হ্যাকিংয়ের হাতিয়ার হিসেবে ব্যবহার করা যেতে পারে। ওয়েবসাইটে বিশেষ কোনো অধিকার কে কিছু নির্দিষ্ট ধরনের ব্যবহারকারীর কাছে অলভ্য করে রাখার জন্য তাৎক্ষনিকভাবে কিছু ইউজার কন্ট্রোলকে নিষ্ক্রিয় (Disable) করে রাখার প্রবণতা ডেভেলপারদের মধ্যে দেখা যায় যা কিনা একজন হ্যাকারকে প্রলুব্ধ করতে পারে। এই বিষয়ে একটি অভিজ্ঞতার কথা বলি।

"অ্যাসোসিয়েশন অব টিচার্স এডুকেশন" নামক একটি প্রতিষ্ঠান তাদের সদস্য ব্যবস্থাপনার জন্য একটি ওয়েব অ্যাপ্লিকেশন ব্যবহার করে থাকে। ওই অ্যাপ্লিকেশনটির অনলাইন পে-মেন্ট ফরম টেস্ট করতে গিয়ে উপরে বর্ণিত বাগের মতো একটি বাগ পেয়ে যাই। পে-মেন্ট ফরমটি দেখতে অনেকটা নিচের ছবিটির মতো ছিল।



এই ফরমটি ব্যবহার করে সদস্যগণ তাদের রেজিষ্ট্রেশনের শেষ ধাপ সম্পন্ন করে থাকেন। এখানে লক্ষ্যনীয় যে, রেজিষ্ট্রেশন ফি এবং সর্বমোট নামক টেক্সটবক্স দুটি নিষ্ক্রিয় করে রাখা হয়েছিল যাতে করে ব্যবহারকারীরা উক্ত বক্স দুটির মান পরিবর্তন না করতে পারেন। মূলত, সাবমিট বাটনে ক্লিক করলে ব্যবহারকারীর দেয়া ক্রেডিট কার্ড সম্পর্কিত তথ্যের গ্রহনযোগ্যতা পরীক্ষা করে ব্যবহারকারীর ক্রেডিট কার্ড থেকে Total নামক টেক্সটবক্সটির মানের সমপরিমান টাকা (এক্ষেত্রে ১,৮৫০.০০ ডলার) কেটে নেয়া হবে এবং ব্যবহারকারীকে প্রতিষ্ঠানটির একজন আজীবন সদস্য হিসেবে বিবেচনা করা হবে। এরপর আমি যেটা করেছিলাম সেটা হলো Total নামক টেক্সটবক্সটির মান পরিবর্তন করে ১.০০ ডলার করে দিয়ে সাবমিট বাটন টিতে ক্লিক করেছিলাম এবং দেখতে পেলাম আমার দেয়া ক্রেডিট কার্ডটি থেকে মাত্র ১ ডলার কেটে নিয়ে আমাকে আজীবন সদস্যপদ দেয়া হয়েছে। লক্ষ্য করুন, নিরাপত্তার কথা ভেবে প্রোগ্রামাররা রেজিষ্ট্রেশন ফি এবং সর্বমোট টেক্সটবক্স দুটিকে নিষ্ক্রিয় করে রেখেছিলেন আর এ জন্য সার্ভার সাইডে কোনরূপ ভেলিডেশন দেয়ার প্রয়োজনীয়তা মনে করেননি।

কোন নিষ্ক্রিয় ইউজার কন্ট্রোল কে সক্রিয় করার জন্য আমরা Web Developer নামক ফায়ারফক্সের এই জনপ্রিয় Add-on টিকে ব্যবহার করতে পারি নিম্নে দেখানো উপায়ে।



আশা করি প্রোগ্রামার বন্ধুরা এতক্ষনে বুঝে গেছেন বিশেষ ক্ষেত্রসমূহে সার্ভার সাইড ভেলিডেশন কতখানি প্রয়োজন। যে সমস্ত টেস্টার বন্ধুরা এই জাতীয় টেস্ট আগে করতেন না তাদেরকে বলবো, আজ থেকে আপনার টেস্ট কেস তালিকায় উপরের টেস্ট কেসটিও যোগ করে নিন। সতর্ক থাকুন, নিরাপদ থাকুন।

Wednesday, June 4, 2008

তৃতীয় পক্ষের কোড ব্যবহারে সতর্ক থাকুন

গতানুগতিক ডেস্কটপ অ্যাপ্লিকেশনের সঙ্গে তুলনা করলে ওয়েব ডেভেলপমেন্ট কে খানিকটা দ্রুতই বলা চলে। স্বাভাবিক ভাবেই ওয়েব অ্যাপ্লিকেশনগুলোর নির্মাণ সময় ডেস্কটপ অ্যাপ্লিকেশনের তুলনায় কম। হয়তো এর অন্যতম প্রধান কারণ সহজ প্রোগ্রামিং এবং পুনরায় ব্যবহার উপযোগী অসংখ্য কোড লাইব্রেরী।

একথা সত্য যে, পুনরায় চাকা আবিষ্কারের কোন মানে হয় না। তাই প্রোগ্রামাররা অন্যের লিখিত উম্মুক্ত সোর্স কোড ব্যবহার করে তার সুফলটা নিয়ে থাকেন। আপনি হয়তো এসব থার্ড পার্টি কোড লাইব্রেরীগুলোকে বিশ্বাস করে ব্যবহার করছেন। কিন্তু ওগুলোর কতখানি নির্ভরযোগ্যতা রয়েছে? আপনার ওয়েবসাইটটির ডেভেলপমেন্ট শেষ হবার পর সাইটটি লাইভে যাবার আগে ওয়েবসাইটটিতে ব্যবহৃত থার্ড পার্টি কোডগুলোর নিরাপত্তা আরেকবার নিশ্চিত করুন।

সাধারণত হ্যাকাররা এসব থার্ড পার্টি কোডগুলোর উপর সর্বদা নজর রাখেন। তারা এইসব সাধারণ কোডগুলোর ত্রুটি সম্পর্কে জানার জন্য বিভিন্ন ব্লগ, ফোরাম, গ্রুপগুলোতে অংশগ্রহণ করে থাকেন।

Wednesday, May 14, 2008

ইন্টারেস্টিং বাগ

একটি সিস্টেমকে সহজে ব্যবহার উপযোগী করে গড়ে তুলতে হলে ইউজ্যাবিলিটির দিকে মনোযোগ দিতে হয়। আর এটি দিতে গিয়ে অনেকসময় এমন সব গুরুত্বপূর্ণ তথ্য ব্যবহারকারীকে দেখানো হয় যা দেখে একজন অ্যাটাকার প্রলোভিত হয়। আজ এমনই একটি ঘটনার কথা বলি।

ওটা ছিলো আমাদেরই তৈরী করা অনলাইন কমিউনিকেশন বেইজড একটি ইন-হাউজ ওয়েব আ্যপ্লিকেশন। একদিন আমাদের কিউ. এ. ম্যানেজার আমাকে ডেকে বললেন, "একটি ইন্টারেস্টিং বাগ পেয়েছি"। এই জাতীয় হাস্যকর বাগ নাকি উনি কখনো দেখেননি। জানতে চাইলাম বাগটি কি?


প্রিয় পাঠক বাগটি হলো, শিবলী ভাই অ্যাপ্লিকেশনটির সাইন-আপ পেইজ টেস্ট করতে গিয়ে এই মেসেজটি দেখতে পানঃ "The username and password you have given is already used by another user." তৎক্ষনাত আমার ব্যপারটি বুঝতে অসুবিধা হয়েছিলো। কিছুক্ষনের মধ্যে আমিও বুঝতে পারলাম ইন্টারেস্টিং বাগটি লুকিয়ে আছে ওই এরর ম্যাসেজটির মধ্যে।