সিম্পল একটা OTP (ওটিপি) পাঠাতে হবে, পারবেন না?

Azizul Hakim
5 min readOct 16, 2021
Photo by Timo Volz on Unsplash

“ইউজার ফোন নাম্বার দিলে একটা ওটিপি দিয়া ভেরিফাই করবেন, একদম সিম্পল। বুঝলেন? এইটা বানাইতে আপনার ১ ঘন্টাও লাগবে নাহ। হেহেহে।”

এই রকম সিম্পল কথা, সিম্পল চাওয়া-পাওয়া দিয়েই শুরু হয় প্রোগ্রামারদের জীবনের কিছু ঘটনা। কিন্তু তারপর? তারপর সেই ঘটনা জটিল থেকে জটিলতায় গিয়ে আটকায়ে যেতে পারে!

যাই হোক, আজকের সিনারিও আসলে এক হিসেবে সিম্পল-ই। কোন ঝামেলা নেই। ইউজার লগ-ইন করার জন্য তার ফোন নাম্বার দিবে। দিলেই সেই নাম্বারে একটা ওটিপি, অর্থাৎ একটা ওয়ান টাইম পাসওয়ার্ড যাবে, আর ইউজার সেই নাম্বারটা ঠিকঠাকভাবে এন্ট্রি দিলেই লগ-ইন হয়ে যাবে।

“Please enter code 3491 to verify your number.”

এই কাজে জটিলতা আসলে সত্যিকার অর্থে খুব বেশি নেই। কিন্তু বাস্তব জীবনে কাজের ক্ষেত্রে আরও কিছু ছোট ছোট প্রয়োজন চলে আসে। আর তখন এই সহজ কাজটাই অল্প একটু একটু করে কিছুটা জটিল হয়ে যায়।

কাজের শুরু…

ফ্রন্ট-এন্ড থেকে একটা ফরমে ফোন নাম্বার এন্ট্রি নিয়ে সেইটা ব্যাকেন্ডে পাঠানো হবে। আপনি সেইটা এপিআই দিয়ে ব্যাকেন্ড থেকে রিসিভ করবেন। ধরে নিচ্ছি এইটা একটা ভ্যালিড মোবাইল নাম্বার। কেউ যদি ভুলভাল এন্ট্রি দেয়, তাহলে আপনি ফ্রন্ট-এন্ড থেকেই ইউজারকে জানান দিবেন- সঠিক ফোন নাম্বারটি দিন।

যাই হোক, এইবার আপনি ব্যাকেন্ড থেকে কোন এক থার্ড পার্টি এসএমএস সার্ভিসের মাধ্যমে, মেসেজ পাঠিয়ে দিবেন সেই মোবাইল নাম্বারে। সেই জন্য আপনি প্রথমেই চার ডিজিটের একটি র‍্যান্ডম নাম্বার নিলেন। কাজের সুবিধার জন্য আপনি র‍্যান্ডম ফাংশনকে বললেন ১০০০ থেকে ৯৯৯৯ এর মধ্যে আপনাকে যে কোন একটা র‍্যান্ডম নাম্বার যেন রিটার্ন করে। ধরে নেই, সেই ফাংশন আপনাকে রিটার্ন করলো, ১২৩৪। সুতরাং আপনি “Please enter code 1234 to verify your number.” মেসেজটি বানিয়ে, ইউজারকে পাঠিয়ে দিলেন। আর এইযে এই মোবাইল নাম্বারে আপনি ১২৩৪ পাঠিয়েছেন, সেইটা আপনার ডাটাবেজে রেখে দিলেন।

পরের ধাপে, ইউজার ফ্রন্ট-এন্ডে তার মোবাইল নাম্বারে প্রাপ্ত মেসেজটি পড়ার পর, সেখানে ১২৩৪ লিখে সাবমিট করল, আর সুন্দরভাবে লগইন করে ফেলল। ভুল নাম্বার দিলে লগইন হবে না।

আপনার কাজ শেষ। প্রোডাকশন সার্ভারে আপনি কোডটা পুল দিলেন। আপনি হেভি রিল্যাক্স করতে চলে গেলেন।

হ্যাকারের হামলা…

এইবার আসেন প্রথম চ্যালেঞ্জ এ। জনাব হ্যাকার করলো কি, যে কোন একটা মোবাইল নাম্বার দিয়ে ওটিপি সেন্ড করল। তারপর সে অটোমেটিকভাবে ১০০০ থেকে ৯৯৯৯ পর্যন্ত যত নাম্বার আছে সব ট্রাই মারা শুরু করল। আর জানা কথা- একটা না একটা নাম্বার তো সঠিক অবশ্যই! সুতরাং, সে যে কোন নাম্বার লিখে লগ-ইন করে ফেলতে পারবে।

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

এসএমএস কি ফ্রি পাইসেন?

দিন ভালভাবেই চলছিল। কিন্তু হঠাত আপনাকে তলব করে নিয়ে আপনার ম্যানেজার/ক্লায়েন্ট দেখালো, মানুষজন ইচ্ছামতন যার খুশি তার নাম্বার দিয়ে প্রথম ফরম বার বার সাবমিট দিচ্ছে। গুটিকয়েক হ্যাকার অটোমেটিক্যালি ইচ্ছামত ফরম সাবমিট দিচ্ছে। আর এর ফলে, নানান রকম নাম্বারে শত শত হাজার হাজার মেসেজ সেন্ড হচ্ছে। এতে করে আপনার এসএমএস সার্ভিসের বিল আকাশ ভরা তারা হয়ে গেছে। প্রতিদিন হাজার হাজার টাকা করে বিল বাড়ছে!

আপনি বললেন, ব্যাপারনা- সমাধান করে দিচ্ছি। আপনি রেট লিমিট বসিয়ে দিলেন। অর্থাৎ, কোন ইউজার হোক কিংবা হ্যাকার, সে এখন আর এই ফরম ঘন্টায় ৩ বারের বেশি সাবমিট করতে পারবে নাহ।

সমস্যা সমাধান হলো। অহেতুক মেসেজ আর এখন খুব বেশি পাঠানো যায় না। এসএমএস এর খরচ কমে গেল।

মেসেজ না পাইলেই রিট্রাই…

সবই ঠিক আছে কিন্তু দেখা গেল মাঝে মাঝে নেটওয়ার্কের ঝামেলার কারণে মেসেজ যাইতে দেরী হয়। ততক্ষনে ইউজাররা হয়ে যাচ্ছে ধৈর্যহারা! সে সাথে সাথেই আবার ব্যাক করে ফরমে আরেকবার সাবমিট মারে। যেহেতু রেট লিমিট অনুযায়ী সে ঘন্টায় ৩ বার সাবমিট দিতেই পারে, সুতরাং তার নাম্বারে আরও একটা ওটিপি যায়। এরপর কয়েক সেকেন্ড পর, ইউজার একসাথে ২-৩ টা মেসেজ পায়। তখন সে কনফিউজড হয়ে যায়- কোনটা এন্ট্রি দিবে। আর এরপর সে ভুল ওটিপি দিয়ে এন্ট্রি দিয়ে, এরপর সবমিলিয়ে এক ঘন্টার জন্য লক হয়ে যায়। আর লগইন করতে পারেনা। এরপর গিয়ে ফেসবুকে পোস্ট দেয়- সার্ভিস ভাল না…

আপনি এইটা ফিক্স করার জন্য এইবার একটা টাইমার রেখে দিলেন ১ মিনিটের। অর্থাৎ, একবার ওটিপি সেন্ড হলেই, ফ্রন্ট-এন্ড এ একটা টাইমার শুরু হয়ে যাবে। এবং সেই টাইমের মধ্যে ইউজার ইন্সট্যান্টলি আবারও রিট্রাই করতে পারবে না। হয় সে সেই ১ মিনিটের মাঝে ওটিপি এন্ট্রি দিবে, আর নয়তো ১ মিনিট পর সে এইবার ওটিপি পাঠানোর রিট্রাই রিকুয়েস্ট দিবে, যদি সে কোন কারনে এই ১ মিনিটেও ওটিপি না পেয়ে থাকে।

এতে করে আপনার এক ঢিলে দুই পাখি মরলো। একে তো ইউজারের রিট্রাই এর প্রোসেসটা সুন্দর হলো। আর তাছাড়া, আরোও একরকমের সিকিউরিটি এনশিওর হলো যে, ওটিপি ১ মিনিটের মাঝে ইউজার এন্ট্রি না দিলে আপনি সেটা বাতিল করে দিচ্ছেন।

ফিচারময় জীবন…

সময়ের সাথে এইবার আরও কিছু অপশনাল ফিচার এলো-

  • ওটিপি তে সবগুলো ডিজিট একই হওয়া যাবে না।
  • এক ঘন্টায় ৩ বার ট্রাই করতে পারবে বুঝলাম, কিন্তু এক দিনে ১০ বারের বেশি ট্রাই করতে পারবে না।
  • ৩ বার ভুল করার পর ইউজার আবারও প্রথম থেকে শুরু করতে হবে। কিন্তু এইরকম ভাবে ৩বার ভুল করার ঘটনাটাও একদিনে ৩ বার ঘটা যাবে না।
  • কোন ইউজারের জন্য একবার যেই ওটিপি যাবে, পরের ওটিপি সেইম সেইটাই হওয়া যাবে না।
  • কোন ইউজার যদি কোন একটি ঘন্টায় ওটিপি লক হয়ে যায়, সেক্ষেত্রে সে কাস্টমার কেয়ার ফোন দিয়ে জানালে, কাস্টমার কেয়ার এজেন্ট সেই ইউজারের লক তুলে দিতে পারার ব্যবস্থা করতে হবে।
  • ইউজার ওটিপি পাঠিয়ে যদি কিছুই সাবমিট না করে, তাহলে এই সাবমিট না করার ঘটনা ৫ বারের বেশি করতে দেয়া যাবে না।
  • ইউজার যখনই সঠিকভাবে লগইন করে ফেলতে পারবে ওটিপি দিয়ে, তাহলে তার জন্য সেইদিনের সকল কাউন্টার ও রেট লিমিট রিজেট করে দিতে হবে।
  • ইউজার কোন নাম্বার দিয়ে লগইন করা থাকলে, সেই সেশন চলাকালে সেই ইউজারকে ওটিপি দেয়া যাবে না।
  • ইউজার ওটিপি পাঠিয়ে ব্রাউজার ক্লোজ করে, তারপর আবারও ব্রাউজারে নতুন করে ঢুকে আবারও ট্রাই করলেই টাইমআউটের আগে আরো একটা ওটিপি চলে গেল, এইরকম হওয়া যাবে না।
  • আর সবশেষে- এইযে ওটিপি যাচ্ছে, এইগুলোর একটা বিস্তারিত রিপোর্ট এবং গ্রাফ লাগবে।
  • ইত্যাদি ইত্যাদি।

আর এইভাবেই নানান রকম ফিচারের জর্জরিত হয়ে আপনি আবারও ভাবতে লাগলেন, কে যেন বলেছিল? এইটা একদম সিম্পল? এক ঘন্টাও লাগবে না করতে? কই সেই লোক, তারে আরেকবার পাইলে…

--

--