আপনার অ্যাপে API কী কীভাবে নিরাপদ রাখবেন
API কী নিরাপদ রাখতে সেগুলো আপনার হোস্টে সিক্রেট বা এনভায়রনমেন্ট ভেরিয়েবল হিসেবে রাখুন, শুধু সার্ভার-সাইড কোডে ব্যবহার করুন, এবং কখনো চ্যাট, কোড ফাইল, স্ক্রিনশট বা Git রিপোজিটরিতে পেস্ট করবেন না। প্রতিটি কীকে যতটুকু অনুমতি লাগে ততটুকু দিন, প্রোভাইডারের কাছে খরচের সীমা সেট করুন, আর কোনো কী ফাঁস হলে সেটি বদলে ফেলুন — নতুন তৈরি করুন এবং পুরোনোটি মুছুন — শুধু কোথায় দেখা গেছে তা লুকিয়ে রাখবেন না।
API কী হলো একটি সার্ভিসের পাসওয়ার্ড। আপনার OpenAI কী দিয়ে কেউ আপনার টাকায় AI চালাতে পারে; আপনার Stripe সিক্রেট কী দিয়ে কেউ রিফান্ড দিতে পারে; আপনার ইমেইল প্রোভাইডারের কী দিয়ে কেউ আপনার নামে মেইল পাঠাতে পারে। AI অ্যাপ বিল্ডাররা এগুলো সংযুক্ত করতে ভালো, কিন্তু সেগুলো কোথায় যাচ্ছে তা সবসময় সতর্কভাবে দেখে না। তাই এই গাইড দেখায় কীভাবে এগুলো নিরাপদ রাখতে হয় এবং কীভাবে যাচাই করতে হয়।
প্রকাশ্য কী বনাম সিক্রেট কী
সব কী গোপন নয়। পার্থক্যটি জানলে ভুল কীটি নিয়ে আতঙ্কিত না হয়ে ঠিক কীটি উপেক্ষা করা থেকে বাঁচা যায়।
| ধরন | উদাহরণ | ব্রাউজারে থাকতে পারে? |
|---|---|---|
| পাবলিশেবল / প্রকাশ্য কী | Stripe-এর pk_… কী, শুধু ডোমেইনে সীমাবদ্ধ ম্যাপ কী, কিছু অ্যানালিটিক্স আইডি | হ্যাঁ — সেভাবেই তৈরি |
| সিক্রেট কী | Stripe sk_…, OpenAI ও Anthropic কী, ইমেইল প্রোভাইডারের কী, ডেটাবেস পাসওয়ার্ড | কখনো না |
| সার্ভিস/অ্যাডমিন কী | হোস্ট করা ডেটাবেসের অ্যাক্সেস নিয়ম বাইপাস করে এমন কী | কখনো না — সবচেয়ে সংবেদনশীল হিসেবে ধরুন |
কী কোন ধরনের তা নিশ্চিত না হলে প্রোভাইডারের ডকুমেন্টেশন দেখুন। সন্দেহ থাকলে একে সিক্রেট ধরুন।
ধাপ ১: কীগুলো কোডে নয়, সিক্রেট হিসেবে রাখুন
কী থাকা উচিত আপনার হোস্টের এনভায়রনমেন্ট ভেরিয়েবল বা সিক্রেট সেটিংসে। আপনার কোড রানটাইমে নাম ধরে সেগুলো পড়ে (যেমন process.env.OPENAI_API_KEY), তাই মানটি কখনো আপনার ফাইলে দেখা যায় না। পটভূমি জানতে দেখুন এনভায়রনমেন্ট ভেরিয়েবল ও সিক্রেট কী।
কোড থেকে প্রতিটি API কী সরিয়ে এনভায়রনমেন্ট ভেরিয়েবলে নিন। আপনি যে প্রতিটি কী পেয়েছেন তার তালিকা করুন, কোন ফাইলে ছিল, এবং কোন ভেরিয়েবল নাম ব্যবহার করেছেন। মানগুলো দেখাবেন না।
তারপর নিশ্চিত করুন কিছু বাকি নেই:
পুরো প্রজেক্ট খুঁজুন, কনফিগ ফাইল ও যেকোনো .env ফাইল সহ, API কীর মতো বা পাসওয়ার্ডের মতো যা কিছু আছে। ফাইল ও লাইন নম্বর জানান, মান নয়।
ধাপ ২: সিক্রেট কী শুধু সার্ভারে ব্যবহার করুন
এটিই সবচেয়ে গুরুত্বপূর্ণ নিয়ম। ব্রাউজার যা পায়, একজন ভিজিটর তা পড়তে পারে — পেজের সোর্স ও JavaScript ফাইলগুলো ডেভেলপার টুলসে দেখা যায়।
তাই অ্যাপের OpenAI-তে কল করার প্রয়োজন হলে ব্রাউজার কল করবে আপনার সার্ভারে, আর আপনার সার্ভার কী দিয়ে OpenAI-তে কল করবে। কী কখনো সার্ভার ছাড়ে না।
চ্যাট ফিচার সরাসরি ব্রাউজার থেকে OpenAI-তে কল করে। সেই কলটি একটি সার্ভার API রুটে সরান, যা এনভায়রনমেন্ট থেকে OPENAI_API_KEY পড়ে। ব্রাউজার শুধু আমাদের রুটে কল করবে। রুটে লগইন বাধ্যতামূলক করুন।
ফ্রন্টএন্ড ফ্রেমওয়ার্কের একটি সাধারণ ফাঁদ নজরে রাখুন: VITE_ (Vite-এ) বা NEXT_PUBLIC_ (Next.js-এ)-এর মতো প্রকাশ্য প্রিফিক্সওয়ালা ভেরিয়েবল ইচ্ছাকৃতভাবেই ব্রাউজার কোডে বিল্ট হয়। সিক্রেট কী যদি এমন প্রিফিক্স নেয়, তাহলে "একটি এনভায়রনমেন্ট ভেরিয়েবলে আছে" হলেও এটি ফাঁস।
ধাপ ৩: কিছু ফাঁস হচ্ছে কি না পরীক্ষা করুন
কাজ হয়েছে বলে ধরে নেবেন না — লাইভ সাইটে যাচাই করুন:
- ব্রাউজারে প্রকাশিত অ্যাপটি খুলুন।
- ডেভেলপার টুলস খুলুন, তারপর Sources বা Network ট্যাব।
- ফাইল জুড়ে প্রতিটি সিক্রেট কীর প্রথম কয়েকটি অক্ষর খুঁজুন (যেমন
sk_বাsk-)। - অ্যাপ যে নেটওয়ার্ক অনুরোধ করে তা দেখুন। ব্রাউজার থেকে সরাসরি কোনো পেইড AI প্রোভাইডারে যাওয়া অনুরোধ একটি লাল সংকেত।
সিক্রেট কী পেলে সেটি সার্ভারে সরান (ধাপ ২) এবং বদলে ফেলুন (ধাপ ৬), কারণ সেটি আগে থেকেই প্রকাশ্য ছিল।
ধাপ ৪: প্রতিটি কী কী করতে পারে তা সীমাবদ্ধ করুন
অনেক প্রোভাইডার কী সীমাবদ্ধ করতে দেয়:
- স্কোপড বা সীমাবদ্ধ কী, যা শুধু আপনার অ্যাপের যা দরকার তা করতে পারে। যেমন Stripe নির্দিষ্ট অনুমতিসহ সীমাবদ্ধ কী সাপোর্ট করে।
- প্রকাশ্য হতেই হয় এমন কীর জন্য ডোমেইন বা IP সীমা, যেমন ম্যাপ কী।
- প্রতি অ্যাপ ও পরিবেশের জন্য আলাদা কী, যাতে একটি ফাঁস হলে সবকিছু প্রকাশ্য না হয়, এবং একটি বাতিল করলে অন্যগুলো না ভাঙে।
- বানানোর সময় টেস্ট কী, আর লাইভ কী শুধু প্রকাশিত অ্যাপে।
ধাপ ৫: ক্ষতির একটি সীমা টানুন
এমনকি ভালোভাবে সুরক্ষিত কীও আপনার নিজের অ্যাপের মাধ্যমে অপব্যবহার হতে পারে — যেমন কেউ আপনার AI ফিচারে হাজারবার স্ক্রিপ্ট চালালো।
- প্রতিটি পেইড প্রোভাইডারে খরচের সীমা বা সতর্কতা সেট করুন।
- প্রতি কলে টাকা লাগে এমন যেকোনো ফিচারের জন্য লগইন বাধ্যতামূলক করুন।
- একটি ব্যবহারকারীপ্রতি রেট লিমিট যোগ করুন। দেখুন রেট লিমিটিং কী।
/api/chat-এ ব্যবহারকারীপ্রতি ঘণ্টায় ৩০টি AI অনুরোধের সীমা যোগ করুন। সীমায় পৌঁছালে একটি স্পষ্ট বার্তা দিন। যারা লগইন করা নন তাদের অনুরোধ প্রত্যাখ্যান করুন।
ধাপ ৬: ফাঁস হওয়া কী বদলে ফেলুন
সিক্রেট কী যদি এমন কোথাও আসে যেখানে আসা উচিত নয় — চ্যাট বার্তা, কমিট, স্ক্রিনশট, সাপোর্ট টিকেট, ব্রাউজার কোড — ধরে নিন এটি আপোস হয়েছে।
- প্রোভাইডারে একটি নতুন কী তৈরি করুন।
- আপনার অ্যাপের সেটিংসে সিক্রেট আপডেট করুন।
- লাইভ অ্যাপ নতুন কী ব্যবহার করার জন্য রিডিপ্লয় বা আবার প্রকাশ করুন।
- প্রোভাইডারে পুরোনো কী মুছুন।
- প্রোভাইডারের ব্যবহারের লগে আপনি চেনেন না এমন কার্যকলাপ আছে কি না দেখুন।
চ্যাট বার্তা বা Git কমিট মুছলেই যথেষ্ট নয়। Git ইতিহাস পুরোনো সংস্করণ রাখে, আর যা প্রকাশ্য তা হয়তো আগেই কপি হয়ে গেছে।
সাধারণ ভুল
- প্রম্পটে কী পেস্ট করা। এটি এখন চ্যাট ইতিহাসে। বরং একটি সিক্রেট ফর্ম ব্যবহার করুন।
- একটি সিক্রেট ভেরিয়েবলে প্রকাশ্য প্রিফিক্স।
VITE_OPENAI_API_KEYকী প্রতিটি ভিজিটরের কাছে পাঠিয়ে দেয়। - একটি
.envফাইল কমিট করা। প্রথম পুশের আগে নিশ্চিত করুন এটি.gitignore-এ আছে। - সব জায়গায় একটি কী। টেস্ট ও লাইভের জন্য, এবং প্রতিটি অ্যাপের জন্য আলাদা কী ব্যবহার করুন।
- কোনো খরচের সীমা না থাকা। ফাঁস বা অপব্যবহৃত কী যদি সীমা ছাড়া থাকে, আপনি লক্ষ্য করার আগেই বড় বিল হতে পারে।
- লুকানোর বদলে বদলে না ফেলা। একবার কী প্রকাশ্য হলে শুধু একটি নতুন কীই সমাধান।
- স্ক্রিনশটে কী। সাহায্য চাওয়ার আগে সেটিংসের পাতা ক্রপ বা ঝাপসা করুন।
চেকলিস্ট
- প্রতিটি কী সিক্রেট বা এনভায়রনমেন্ট ভেরিয়েবল হিসেবে আছে, কোডে নয়।
- কোনো
.envফাইল বা কী Git-এ কমিট হয়নি। - সিক্রেট কী শুধু সার্ভার-সাইড কোডে ব্যবহৃত।
- কোনো সিক্রেট ভেরিয়েবলে
VITE_বাNEXT_PUBLIC_-এর মতো প্রকাশ্য প্রিফিক্স নেই। - আমি লাইভ সাইটের JavaScript-এ প্রতিটি কীর প্রিফিক্স খুঁজেছি এবং কিছু পাইনি।
- প্রোভাইডার অনুমতি দিলে কীগুলো সীমাবদ্ধ।
- টেস্ট ও লাইভ কী আলাদা।
- পেইড ফিচারগুলোতে লগইন ও ব্যবহারকারীপ্রতি সীমা আছে।
- প্রতিটি পেইড প্রোভাইডারে খরচের সীমা বা সতর্কতা আছে।
- আমি জানি প্রতিটি কী কীভাবে বদলাতে হয়, এবং যেকোনো কী কখনো প্রকাশ্য হয়ে থাকলে সেটি বদলানো হয়েছে।
Mythex-এ কী নিরাপদ রাখা
Mythex আপনার কোড ও চ্যাট থেকে কী দূরে রাখে দুটি উপায়ে:
- সিক্রেট অনুরোধ কার্ড। এজেন্টের কোনো কী দরকার হলে সে চ্যাটে একটি কার্ড দেখায়, যেখানে আপনি মান লেখেন ফর্ম ফিল্ডে, মেসেজ বক্সে নয়, আর এটি প্রজেক্ট সিক্রেট হিসেবে সংরক্ষিত হয়। দেখুন চ্যাটে সিক্রেট।
- প্রজেক্ট সেটিংস → Secrets, অথবা চ্যাটে
/secrets, যেখান থেকে নিজে কী যোগ বা বদলাতে পারেন। দেখুন এনভায়রনমেন্ট ভেরিয়েবল ও সিক্রেট।
প্রকাশিত অ্যাপে কোনো সিক্রেট বদলালে লাইভ অ্যাপ সেটি ধরতে আবার প্রকাশ করুন। রপ্তানি করা প্রজেক্টে সিক্রেট থাকে না, তাই যেখানেই কোড চালান সেখানে আবার যোগ করুন। কোনো কী যদি কখনো চ্যাটে আসে, প্রোভাইডারে সেটি বদলে ফেলুন।
লঞ্চের আগের বাকি নিরাপত্তা যাচাইয়ের জন্য দেখুন AI দিয়ে বানানো অ্যাপের নিরাপত্তা চেকলিস্ট। AI ফিচার যোগ করলে LLM API কীভাবে ব্যবহার করবেন-এ কী ও খরচ নিয়ে আরও গভীর আলোচনা আছে।
প্রশ্নোত্তর
ফ্রন্টএন্ড কোডে API কী রাখা কি নিরাপদ?
শুধু তখনই, যদি প্রোভাইডার ওই কীটি প্রকাশ্য হওয়ার জন্য তৈরি করে থাকে, যেমন Stripe-এর পাবলিশেবল কী বা শুধু আপনার ডোমেইনে সীমাবদ্ধ একটি ম্যাপ কী। যে কোনো কী টাকা খরচ করতে পারে বা ব্যক্তিগত ডেটা পড়তে পারে, সেটি সার্ভারে থাকতে হবে, কারণ ব্রাউজারে পাঠানো যেকোনো কিছু যে কেউ পড়তে পারে।
চ্যাটে বা পাবলিক রিপোতে API কী পেস্ট করে ফেললে কী করব?
কী বদলে ফেলুন: প্রোভাইডারে নতুন কী তৈরি করুন, আপনার অ্যাপের সিক্রেট আপডেট করুন, আবার প্রকাশ করুন, তারপর পুরোনো কী মুছে দিন। বার্তা বা কমিট মুছলেই যথেষ্ট নয়, কারণ কপি আগে থেকেই থাকতে পারে।
API কী কোথায় সংরক্ষণ করা উচিত?
আপনার হোস্টের এনভায়রনমেন্ট ভেরিয়েবল বা সিক্রেট সেটিংসে, যা সার্ভার-সাইড কোড রানটাইমে পড়ে। সোর্স ফাইলে লেখা, Git-এ কমিট করা বা স্ক্রিনশটে থাকা উচিত নয়।
আমার ওয়েবসাইটে API কী ফাঁস হয়েছে কি না কীভাবে বুঝব?
আপনার লাইভ সাইট খুলুন, পেজের সোর্স এবং ব্রাউজারের ডেভেলপার টুলসে JavaScript ফাইলগুলো দেখুন, আর কীটির শুরুর অংশ খুঁজুন। পাওয়া গেলে সেটি ফাঁস হয়েছে; সার্ভারে সরিয়ে বদলে ফেলুন।