আপনার Firebase রিসোর্স এবং ব্যবহারকারীর ডেটা সুরক্ষিত রাখতে, এইসব নির্দেশিকা অনুসরণ করুন। আপনার প্রয়োজনীয়তার ক্ষেত্রে প্রতিটি আইটেম প্রযোজ্য নাও হতে পারে, তবে আপনার অ্যাপ ডেভেলপ করার সময় সেগুলি মনে রাখবেন।
অপব্যবহারমূলক ট্রাফিক এড়ানো
ব্যাকএন্ড পরিষেবার জন্য মনিটরিং ও অ্যালার্ট সেট-আপ করা
পরিষেবা-প্রত্যাখ্যানের (DOS) অ্যাটাকের মতো অপব্যবহারমূলক ট্রাফিক শনাক্ত করতে, Cloud Firestore, Realtime Database, Cloud Storage এবং Hosting-এর জন্য মনিটর ও অ্যালার্ট সেট-আপ করুন
আপনার অ্যাপ্লিকেশনে আক্রমণ করা হয়েছে বলে সন্দেহ করলে, যত তাড়াতাড়ি সম্ভব সহায়তা টিমের সাথে যোগাযোগ করুন এবং কী ঘটছে তা তাদের জানান।
App Check চালু করুন
আপনার ব্যাকএন্ড পরিষেবা শুধুমাত্র আপনার অ্যাপ অ্যাক্সেস করতে পারে তা নিশ্চিত করতে, যেসব পরিষেবা এটি কাজ করে সেগুলির জন্য Firebase App Check চালু করুন।
স্বাভাবিক ট্রাফিকের জন্য আপনার Cloud Functions স্কেল করতে কনফিগার করুন
আপনার অ্যাপের চাহিদা পূরণ করতে Cloud Functions অটোমেটিক স্কেল করে, কিন্তু অ্যাটাক হলে, এর অর্থ হল অনেক বেশি বিল। এটি আটকাতে, আপনার অ্যাপের সাধারণ ট্রাফিকের উপর ভিত্তি করে, আপনি একসাথে চলতে থাকা ইনস্ট্যান্সের সংখ্যা সীমিত করতে পারেন ।
সীমা প্রায় শেষ হয়ে এলে বিজ্ঞপ্তি পেতে অ্যালার্ট সেট-আপ করা
আপনার পরিষেবায় অনুরোধের সংখ্যা হঠাৎ বেড়ে গেলে, কোটা প্রায়ই চালু হয়ে যায় এবং অটোমেটিক আপনার অ্যাপ্লিকেশনে ট্রাফিক থ্রটল করে দেয়।
আপনার ব্যবহার ও বিলিং ড্যাশবোর্ড মনিটর করতে ভুলবেন না।
আপনার প্রোজেক্টের জন্য বাজেট সংক্রান্ত সতর্কতা সেট-আপ করুন যাতে রিসোর্স ব্যবহার প্রত্যাশার চেয়ে বেশি হলে বিজ্ঞপ্তি পেতে পারেন।
আপনি Firebase AI Logic, Firebase App Hosting, Cloud Functions for Firebase ও Firebase Extensions ব্যবহার করলে, খরচের সীমা সেট-আপ করুন যাতে আপনার প্রোজেক্ট কোনও পরিষেবার জন্য সেট করা বাজেটে পৌঁছে গেলে, প্রযোজ্য পরিষেবা পজ করা যায়।
সেল্ফ-DOSes প্রতিরোধ করা: এমুলেটরের মাধ্যমে স্থানীয়ভাবে ফাংশন টেস্ট করা
ডেভেলপ করার সময় ভুলবশত নিজেকে DOS করা সহজ হতে পারে Cloud Functions: যেমন, একটি অসীম ট্রিগার-রাইট লুপ তৈরি করে। আপনি Firebase Local Emulator Suite-এর মাধ্যমে ডেভেলপমেন্ট করে, এইসব ভুল যাতে লাইভ পরিষেবাকে প্রভাবিত না করে তা আটকাতে পারবেন।
আর আপনি যদি ভুলবশত নিজেকে DOS করেন, তাহলে index.js থেকে আপনার ফাংশন মুছে দিয়ে আনডিপ্লয় করুন এবং তারপর
firebase deploy --only functions
যেখানে রিয়েল-টাইম রেসপন্সিভনেস কম গুরুত্বপূর্ণ, সেখানে ফাংশনগুলি রক্ষণাত্মকভাবে গঠন করুন
ফাংশনের ফলাফল রিয়েল টাইমে দেখানোর প্রয়োজন না থাকলে, আপনি ব্যাচে ফলাফল প্রসেস করে অপব্যবহারমূলক ট্রাফিক কমানোর ব্যবস্থা নিতে পারেন: কোনও Pub/Sub বিষয়ে ফলাফল প্রকাশ করুন এবং শিডিউল করা ফাংশন ব্যবহার করে নিয়মিত বিরতিতে ফলাফল প্রসেস করুন।
API key সম্পর্কে জানুন
Firebase পরিষেবার API কী গোপন নয়
Firebase পরিষেবার API কী শুধুমাত্র সেইসব পরিষেবার কাছে আপনার Firebase প্রোজেক্ট ও অ্যাপকে শনাক্ত করে। Google Cloud IAM অনুমতি, Firebase Security Rules এবং Firebase App Check-এর মাধ্যমে অনুমতি ম্যানেজ করা হয়।
Firebase-এর মাধ্যমে প্রদান করা সব API কী Firebase-সম্পর্কিত API-এর জন্য অটোমেটিক সীমাবদ্ধ করা হয়। আপনার অ্যাপের সেট-আপ এই পৃষ্ঠায় দেওয়া নির্দেশিকা মেনে চললে, তাহলে Firebase পরিষেবায় সীমাবদ্ধ API কী-কে সিক্রেট হিসেবে গণ্য করার প্রয়োজন নেই এবং আপনার কোড বা কনফিগারেশন ফাইলে সেগুলি অন্তর্ভুক্ত করা নিরাপদ।
API কী সংক্রান্ত বিধিনিষেধ সেট-আপ করুন
আপনি অন্যান্য Google পরিষেবার জন্য API key ব্যবহার করলে, আপনার অ্যাপ ক্লায়েন্ট ও আপনার ব্যবহার করা API-তে API key-এর স্কোপ নির্ধারণ করতে API key সংক্রান্ত বিধিনিষেধ প্রয়োগ করেছেন কিনা তা ভাল করে দেখে নিন।
আপনার Firebase-এর মাধ্যমে প্রদান করা API কী শুধুমাত্র Firebase-সম্পর্কিত API-এর জন্য ব্যবহার করুন। আপনার অ্যাপ অন্য কোনও API (যেমন, Maps-এর জন্য Places API বা Gemini Developer API) ব্যবহার করলে, আলাদা API কী ব্যবহার করুন এবং প্রযোজ্য API-তে এটি সীমাবদ্ধ করুন।
FCM সার্ভার কী গোপন রাখুন
Firebase পরিষেবার জন্য API কী-এর মতো নয়, FCM সার্ভার কী (যা পুরনো FCM HTTP API ব্যবহার করে) হল সংবেদনশীল এবং অবশ্যই গোপন রাখতে হবে।
Cloud Messaging-এর জন্য অডিট লগিং চালু করুন
Cloud Messaging-এর জন্য ক্লাউড অডিট লগিং চালু করার কথা বিবেচনা করুন যাতে আপনি FCM রিসোর্সের মধ্যে অ্যাডমিনিস্ট্রেটিভ অ্যাক্টিভিটি এবং অ্যাক্সেস ইভেন্ট রেকর্ড করতে পারেন।
পরিষেবা অ্যাকাউন্টের কী গোপন রাখুন
Firebase পরিষেবার জন্য API কী-এর মতো নয়, পরিষেবা অ্যাকাউন্টের ব্যক্তিগত কী (যা Firebase Admin SDK ব্যবহার করে) হল সংবেদনশীল এবং অবশ্যই গোপন রাখতে হবে।
Firebase Security Rules
প্রোডাকশন বা লক করা মোডে নিয়ম শুরু করা
আপনি Cloud Firestore, Realtime Database ও Cloud Storage সেট-আপ করার সময়, ডিফল্ট হিসেবে সব অ্যাক্সেস বাতিল করতে Firebase Security Rules ইনিশিয়ালাইজ করুন এবং আপনার অ্যাপ ডেভেলপ করার সময় নির্দিষ্ট রিসোর্সে অ্যাক্সেস দিতে নিয়ম যোগ করুন।
Cloud Firestore (প্রোডাকশন মোড) ও Realtime Database (লকড মোড)-এর নতুন ইনস্ট্যান্সের জন্য ডিফল্ট সেটিংসের মধ্যে একটি ব্যবহার করুন। Cloud Storage-এর জন্য, নিম্নলিখিত ধরনের নিরাপত্তা নিয়ম কনফিগারেশন দিয়ে শুরু করুন:
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if false;
}
}
}
নিরাপত্তা সংক্রান্ত নিয়ম হল একটি স্কিমা; আপনি ডকুমেন্ট যোগ করার সময় নিয়ম যোগ করুন
আপনার অ্যাপ লেখার পরে নিরাপত্তা সংক্রান্ত নিয়ম লিখবেন না, এটি প্রি-লঞ্চ টাস্কের মতো। এর পরিবর্তে, আপনার অ্যাপ লেখার সময় নিরাপত্তা সংক্রান্ত নিয়ম লিখুন, সেগুলিকে ডেটাবেস স্কিমা হিসেবে বিবেচনা করুন: যখনই আপনাকে নতুন ডকুমেন্ট টাইপ বা পাথ স্ট্রাকচার ব্যবহার করতে হবে, প্রথমে তার নিরাপত্তা সংক্রান্ত নিয়ম লিখুন।
Local Emulator Suite-এর মাধ্যমে ইউনিট টেস্ট নিরাপত্তা সংক্রান্ত নিয়ম; CI-তে এটি যোগ করুন
আপনার অ্যাপের ডেভেলপমেন্টের সাথে সাথে আপনার সুরক্ষা সংক্রান্ত নিয়মও আপডেট হচ্ছে কিনা তা নিশ্চিত করতে, Firebase Local Emulator Suite ব্যবহার করে আপনার নিয়মের ইউনিট টেস্ট করুন এবং আপনার CI পাইপলাইনে এইসব টেস্ট যোগ করুন। এইসব নির্দেশিকা দেখুন Cloud Firestore এবং Realtime Database.
যাচাইকরণ
কাস্টম যাচাইকরণ: বিশ্বস্ত (সার্ভার-সাইড) এনভায়রনমেন্ট থেকে JWT মিন্ট করুন
আপনার কাছে আগে থেকেই কোনও সুরক্ষিত সাইন-ইন সিস্টেম থাকলে, সেটি কাস্টম সিস্টেম বা থার্ড-পার্টি পরিষেবা যাই হোক না কেন, আপনি Firebase পরিষেবার মাধ্যমে যাচাই করার জন্য আপনার বিদ্যমান সিস্টেম ব্যবহার করতে পারেন। বিশ্বস্ত এনভায়রনমেন্ট থেকে কাস্টম JWT তৈরি করুন, তারপর আপনার ক্লায়েন্টকে টোকেন পাস করুন, যা যাচাইকরণের জন্য টোকেন ব্যবহার করে (iOS+, Android, ওয়েব, Unity, C++)।
থার্ড-পার্টি প্রদানকারীর সাথে কাস্টম যাচাইকরণ ব্যবহারের উদাহরণ দেখতে, ব্লগ পোস্ট, Okta ব্যবহার করে Firebase-এর মাধ্যমে যাচাই করুন দেখুন।
ম্যানেজ করা যাচাইকরণ: OAuth 2.0 প্রদানকারী সবচেয়ে সুরক্ষিত
আপনি Firebase-এর ম্যানেজ করা যাচাইকরণ ফিচার ব্যবহার করলে, OAuth 2.0 / OpenID Connect প্রদানকারী বিকল্প (Google, Facebook ইত্যাদি) সবচেয়ে নিরাপদ। আপনি পারলে (আপনার ব্যবহারকারীর সংখ্যার উপর নির্ভর করে) এইসব পরিষেবা প্রদানকারীর মধ্যে এক বা একাধিককে সমর্থন করা উচিত।
ইমেল-পাসওয়ার্ড যাচাইকরণ: ব্রুট ফোর্স অ্যাটাক আটকাতে সাইন-ইন এন্ডপয়েন্টের জন্য কঠোর কোটা সেট করুন
আপনি Firebase-এর ম্যানেজ করা ইমেল-পাসওয়ার্ড যাচাইকরণ পরিষেবা ব্যবহার করলে, ব্রুট ফোর্স অ্যাটাক
প্রতিরোধ করতে identitytoolkit.googleapis.com এন্ডপয়েন্টের ডিফল্ট কোটা
আরও কঠোর করুন। আপনি Google Cloud কনসোলে
Identity Toolkit API পৃষ্ঠা
থেকে এটি করতে পারবেন।
ইমেল-পাসওয়ার্ড যাচাইকরণ: ইমেল এনিউমারেশন সুরক্ষা চালু করুন
আপনি Firebase-এর ম্যানেজ করা ইমেল-পাসওয়ার্ড যাচাইকরণ পরিষেবা ব্যবহার করলে, ইমেল এনুমেরেশন সুরক্ষা চালু করুন, যা আপনার প্রোজেক্টের যাচাইকরণ এন্ডপয়েন্টকে অপব্যবহার করে অ্যাকাউন্টের নাম অনুমান করা থেকে ক্ষতিকারক অ্যাক্টরদের আটকায়।
বহু-স্তরীয় যাচাইকরণের জন্য Google Cloud Identity Platform-এ আপগ্রেড করুন
সাইন-ইন করার সময় অতিরিক্ত সুরক্ষার জন্য, Google Cloud Identity Platform-এ আপগ্রেড করে আপনি বহু-স্তরীয় যাচাইকরণ সহায়তা যোগ করতে পারবেন। আপগ্রেড করার পরেও আপনার আগে থেকে থাকা Firebase Authentication কোড কাজ করবে।
পরিচয় গোপন রেখে যাচাইকরণ
ওয়ার্ম অনবোর্ডিংয়ের জন্য শুধু পরিচয় গোপন রেখে যাচাইকরণ ব্যবহার করুন
ব্যবহারকারীরা সাইন-ইন করার আগে তাদের প্রাথমিক অবস্থা সেভ করার জন্য শুধুমাত্র পরিচয় গোপন রেখে যাচাইকরণ ব্যবহার করুন। ব্যবহারকারীর সাইন-ইনের বিকল্প হিসেবে পরিচয়হীন যাচাইকরণ ব্যবহার করা যাবে না।
ব্যবহারকারীরা অন্য ডিভাইসে তাদের ডেটা চাইলে তাদের অন্য সাইন-ইন পদ্ধতিতে কনভার্ট করুন
ব্যবহারকারী লোকাল স্টোরেজ মুছে দিলে বা ডিভাইস পরিবর্তন করলে, পরিচয় গোপন রেখে যাচাইকরণ সংক্রান্ত ডেটা আর থাকবে না। একটি ডিভাইসে অ্যাপ রিস্টার্ট করার পরেও ডেটা রাখতে চাইলে, ব্যবহারকারীকে স্থায়ী অ্যাকাউন্টে পরিবর্তন করুন।
এমন নিরাপত্তা নিয়ম ব্যবহার করুন যার জন্য ব্যবহারকারীদের সাইন-ইন পরিষেবা প্রদানকারীতে কনভার্ট করতে হবে অথবা তাদের ইমেল আইডি যাচাই করতে হবে
যেকোনও ব্যক্তি আপনার প্রোজেক্টে একটি বেনামী অ্যাকাউন্ট তৈরি করতে পারেন। সেই কথা মাথায় রেখে, নিরাপত্তা সংক্রান্ত নিয়ম যা নির্দিষ্ট সাইন-ইন পদ্ধতি বা যাচাই করা ইমেল আইডি চায় তার মাধ্যমে সব সর্বজনীন নয় এমন ডেটা সুরক্ষিত রাখুন।
যেমন:
allow write: if request.auth.token.firebase.sign_in_provider != "anonymous";
allow write: if request.auth.token.email_verified = true;
Cloud Functions নিরাপত্তা
এনভায়রনমেন্ট ভেরিয়েবলে কখনও সংবেদনশীল তথ্য লিখবেন না
প্রায়ই সেল্ফ-হোস্ট করা Node.js অ্যাপে, ব্যক্তিগত কী-এর মতো সংবেদনশীল তথ্য সংরক্ষণ করতে আপনি এনভায়রনমেন্ট ভেরিয়েবল ব্যবহার করেন। Cloud Functions-এ এটি করবেন না। ফাংশন ইনভোকেশনের মধ্যে Cloud Functions এনভায়রনমেন্ট রিইউজ করে বলে, এনভায়রনমেন্টে সংবেদনশীল তথ্য স্টোর করা উচিত নয়।
Firebase API কী (যা গোপন নয়) স্টোর করতে, সেগুলি কোডে এম্বেড করুন।
আপনি Cloud Functions-এ Firebase Admin SDK ব্যবহার করলে, আপনাকে আলাদা করে পরিষেবা অ্যাকাউন্টের ক্রেডেনশিয়াল দিতে হবে না, কারণ Admin SDK ইনিশিয়ালাইজেশনের সময় অটোমেটিক সেগুলি পেয়ে যায়।
আপনি যদি Google এবং Google Cloud API কল করেন যার জন্য পরিষেবা অ্যাকাউন্ট ক্রেডেনশিয়াল প্রয়োজন, তাহলে Node.js-এর জন্য Google Auth লাইব্রেরি এই ক্রেডেনশিয়াল অ্যাপ্লিকেশন ডিফল্ট ক্রেডেনশিয়াল থেকে পেতে পারে, যা Cloud Functions-এ অটোমেটিক পূরণ করা হয়।
আপনার Cloud Functions-এর জন্য Google-এর নয় এমন পরিষেবার ব্যক্তিগত কী ও ক্রেডেনশিয়াল উপলভ্য করতে, Secret Manager ব্যবহার করুন।
সংবেদনশীল তথ্য এনক্রিপ্ট করা
আপনার ফাংশনে সংবেদনশীল তথ্য পাস করা এড়াতে না পারলে, তথ্য এনক্রিপ্ট করার জন্য আপনাকে নিজস্ব কাস্টম সমাধান নিয়ে আসতে হবে।
সাধারণ ফাংশন বেশি নিরাপদ; জটিলতার প্রয়োজন হলে, Cloud Run বিবেচনা করুন
আপনার ফাংশন যতটা সম্ভব সহজ ও বোধগম্য রাখার চেষ্টা করুন। আপনার ফাংশনের জটিলতা প্রায়শই এমন বাগ তৈরি করতে পারে যা সহজে ধরা যায় না বা অপ্রত্যাশিত আচরণ করে।
আপনার যদি জটিল লজিক বা এনভায়রনমেন্ট কনফিগারেশনের প্রয়োজন হয়, তাহলে Cloud Functions-এর পরিবর্তে Cloud Run ব্যবহার করার কথা বিবেচনা করুন।
পরিবেশ ম্যানেজমেন্ট
ডেভেলপমেন্ট ও স্টেজিং প্রোজেক্ট সেট-আপ করা
ডেভেলপমেন্ট, স্টেজিং ও প্রোডাকশনের জন্য আলাদা Firebase প্রোজেক্ট সেট-আপ করুন। স্টেজিং প্রোজেক্টের সাথে পরীক্ষা না করা পর্যন্ত প্রোডাকশনে ক্লায়েন্ট কোড মার্জ করবেন না।
প্রোডাকশন ডেটায় টিমের অ্যাক্সেস সীমিত করা
আপনি যদি বড় টিমের সাথে কাজ করেন, তাহলে আগে থেকে নির্ধারিত IAM ভূমিকা বা কাস্টম IAM ভূমিকা ব্যবহার করে প্রোডাকশন ডেটাতে অ্যাক্সেস সীমিত করার মাধ্যমে ভুল ও লঙ্ঘন সংক্রান্ত সমস্যা কমাতে পারবেন।
আপনার টিম ডেভেলপমেন্টের জন্য Firebase Local Emulator Suite (সাজেস্ট করা) ব্যবহার করলে, আপনাকে হয়ত প্রোডাকশন প্রোজেক্টে আরও বেশি অ্যাক্সেস দিতে হবে না।
লাইব্রেরি ম্যানেজমেন্ট
লাইব্রেরির নামের বানান ভুল আছে কিনা বা নতুন কোনও মেন্টেনার আছে কিনা তা দেখুন
আপনার প্রোজেক্টে লাইব্রেরি যোগ করার সময়, লাইব্রেরির নাম এবং এর রক্ষণাবেক্ষণকারীদের প্রতি গভীর মনোযোগ দিন। আপনি যে লাইব্রেরি ইনস্টল করতে চান সেটির মতো একই নামের লাইব্রেরিতে ক্ষতিকর কোড থাকতে পারে।
পরিবর্তনগুলি না বুঝে লাইব্রেরি আপডেট করবেন না
আপগ্রেড করার আগে আপনার ব্যবহার করা যেকোনও লাইব্রেরির পরিবর্তন লগ দেখে নিন। আপগ্রেড করলে সুবিধা হবে কিনা তা নিশ্চিত করুন এবং যে ব্যক্তি বা সংস্থা এটি ম্যানেজ করে, তার উপর আপনার এখনও ভরসা আছে কিনা তা চেক করুন।
ডেভ বা টেস্ট ডিপেন্ডেন্সি হিসেবে ওয়াচডগ লাইব্রেরি ইনস্টল করুন
নিরাপত্তাহীন ডিপেন্ডেন্সির জন্য আপনার প্রোজেক্ট স্ক্যান করতে, Snyk-এর মতো লাইব্রেরি ব্যবহার করুন।
Cloud Functions-এর জন্য মনিটর সেট-আপ করুন; লাইব্রেরি আপডেট করার পরে এটি চেক করুন
আপনি Cloud Functions logger SDK ব্যবহার করলে, আপনি মনিটর করতে এবং সতর্ক হতে পারবেন, যার মধ্যে লাইব্রেরি আপডেটের কারণে হওয়া আচরণও অন্তর্ভুক্ত।