Firebase নিরাপত্তা চেকলিস্ট

আপনার 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 key সংক্রান্ত বিধিনিষেধ সেট-আপ করা

অন্যান্য Google পরিষেবার জন্য API কী ব্যবহার করলে, আপনার অ্যাপ ক্লায়েন্ট ও আপনার ব্যবহার করা API-এর জন্য API কী-এর স্কোপ সীমাবদ্ধ করতে API কী সীমাবদ্ধতা প্রয়োগ করতে ভুলবেন না।

আপনার Firebase-এর মাধ্যমে প্রদান করা API কী শুধুমাত্র Firebase-সম্পর্কিত API-এর জন্য ব্যবহার করুন। আপনার অ্যাপ অন্য কোনও API (যেমন, Maps-এর জন্য Places API বা Gemini Developer API) ব্যবহার করলে, আলাদা API কী ব্যবহার করুন এবং প্রযোজ্য API-তে এটি সীমাবদ্ধ করুন।

FCM সার্ভার কী গোপন রাখুন

Firebase পরিষেবার API কী-এর মতো, FCM সার্ভার কী (যা লেগ্যাসি FCM HTTP API) ব্যবহার করে) সংবেদনশীল এবং অবশ্যই গোপন রাখতে হবে।

পরিষেবা অ্যাকাউন্টের কী গোপন রাখুন

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 ব্যবহার করলে, আপনি মনিটর করতে এবং সতর্ক হতে পারবেন, যার মধ্যে লাইব্রেরি আপডেটের কারণে হওয়া আচরণও অন্তর্ভুক্ত।