ফায়ারবেস নিরাপত্তা চেকলিস্ট

আপনার Firebase সম্পদ এবং আপনার ব্যবহারকারীদের ডেটা সুরক্ষিত রাখতে, এই নির্দেশিকাগুলি অনুসরণ করুন৷ প্রতিটি আইটেম অগত্যা আপনার প্রয়োজনীয়তার জন্য প্রযোজ্য হবে না, তবে আপনি যখন আপনার অ্যাপটি বিকাশ করবেন তখন সেগুলি মনে রাখবেন।

আপত্তিজনক ট্রাফিক এড়িয়ে চলুন

ব্যাকএন্ড পরিষেবাগুলির জন্য পর্যবেক্ষণ এবং সতর্কতা সেট আপ করুন৷

আপত্তিজনক ট্র্যাফিক সনাক্ত করতে, যেমন ডিনায়াল-অফ-সার্ভিস (ডস) আক্রমণ, ক্লাউড ফায়ারস্টোর , রিয়েলটাইম ডেটাবেস , ক্লাউড স্টোরেজ এবং হোস্টিংয়ের জন্য মনিটরিং এবং সতর্কতা সেট আপ করুন

আপনার অ্যাপ্লিকেশানে আক্রমণের সন্দেহ হলে, কী ঘটছে তা তাদের জানাতে যত তাড়াতাড়ি সম্ভব সহায়তার সাথে যোগাযোগ করুন।

অ্যাপ চেক সক্ষম করুন

শুধুমাত্র আপনার অ্যাপগুলিই আপনার ব্যাকএন্ড পরিষেবাগুলি অ্যাক্সেস করতে পারে তা নিশ্চিত করতে সাহায্য করার জন্য, এটি সমর্থন করে এমন প্রতিটি পরিষেবার জন্য অ্যাপ চেক সক্ষম করুন৷

স্বাভাবিক ট্র্যাফিকের জন্য স্কেল করার জন্য আপনার ক্লাউড ফাংশনগুলি কনফিগার করুন

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

সীমা প্রায় পৌছে গেলে বিজ্ঞপ্তি দেওয়ার জন্য সতর্কতা সেট আপ করুন

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

স্ব-ডস প্রতিরোধ করুন: এমুলেটরগুলির সাথে স্থানীয়ভাবে ফাংশন পরীক্ষা করুন

ক্লাউড ফাংশনগুলি বিকাশ করার সময় দুর্ঘটনাক্রমে নিজেই DOS করা সহজ হতে পারে: উদাহরণস্বরূপ, একটি অসীম ট্রিগার-রাইট লুপ তৈরি করে৷ আপনি Firebase এমুলেটর স্যুট দিয়ে আপনার ডেভেলপমেন্ট করে লাইভ পরিষেবাগুলিকে প্রভাবিত করা থেকে এই ভুলগুলিকে প্রতিরোধ করতে পারেন৷

(এবং আপনি যদি দুর্ঘটনাবশত নিজে DOS করে থাকেন, তাহলে index.js থেকে আপনার ফাংশনটি সরিয়ে ফায়ারবেস firebase deploy --only functions চালু করে তা আনডিপ্লোয় করুন।)

যেখানে রিয়েল-টাইম প্রতিক্রিয়াশীলতা কম গুরুত্বপূর্ণ, কাঠামোটি রক্ষণাত্মকভাবে কাজ করে

আপনার যদি রিয়েল টাইমে কোনও ফাংশনের ফলাফল উপস্থাপন করার প্রয়োজন না হয়, আপনি ব্যাচে ফলাফলগুলি প্রক্রিয়াকরণের মাধ্যমে আপত্তিজনক ট্র্যাফিকের বিরুদ্ধে প্রশমিত করতে পারেন: একটি পাব/সাব বিষয়ে ফলাফল প্রকাশ করুন এবং একটি নির্ধারিত ফাংশনের সাথে নিয়মিত বিরতিতে ফলাফলগুলি প্রক্রিয়া করুন .

API কী বুঝুন

ফায়ারবেস পরিষেবাগুলির জন্য API কীগুলি গোপন নয়৷

Firebase শুধুমাত্র Firebase পরিষেবাগুলিতে আপনার অ্যাপের Firebase প্রকল্প শনাক্ত করতে API কী ব্যবহার করে, এবং ডাটাবেস বা ক্লাউড স্টোরেজ ডেটার অ্যাক্সেস নিয়ন্ত্রণ করতে নয়, যা Firebase নিরাপত্তা নিয়ম ব্যবহার করে করা হয়। এই কারণে, আপনাকে Firebase পরিষেবাগুলির জন্য API কীগুলিকে গোপনীয় হিসাবে বিবেচনা করার দরকার নেই এবং আপনি সেগুলিকে নিরাপদে ক্লায়েন্ট কোডে এম্বেড করতে পারেন৷ Firebase-এর জন্য API কী সম্পর্কে আরও জানুন।

API কী স্কোপিং সেট আপ করুন

স্পুফ অনুরোধে আপনার API কী ব্যবহার করার চেষ্টাকারী আক্রমণকারীর বিরুদ্ধে অতিরিক্ত প্রতিরোধ হিসাবে, আপনি আপনার অ্যাপ ক্লায়েন্টদের জন্য স্কোপযুক্ত API কী তৈরি করতে পারেন।

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

ফায়ারবেস পরিষেবাগুলির জন্য API কীগুলির বিপরীতে, FCM সার্ভার কীগুলি ( লেগ্যাসি FCM HTTP API দ্বারা ব্যবহৃত) সংবেদনশীল এবং গোপন রাখা আবশ্যক৷

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

এছাড়াও ফায়ারবেস পরিষেবাগুলির জন্য API কীগুলির বিপরীতে, পরিষেবা অ্যাকাউন্ট ব্যক্তিগত কীগুলি ( প্রশাসক SDK দ্বারা ব্যবহৃত) সংবেদনশীল এবং গোপন রাখা আবশ্যক৷

নিরাপত্তা নিয়ম

উৎপাদন বা লক মোডে নিয়ম শুরু করুন

আপনি যখন ক্লাউড ফায়ারস্টোর, রিয়েলটাইম ডেটাবেস এবং ক্লাউড স্টোরেজ সেট আপ করেন, তখন ডিফল্টরূপে সমস্ত অ্যাক্সেস অস্বীকার করার জন্য আপনার সুরক্ষা নিয়মগুলি শুরু করুন এবং আপনার অ্যাপ বিকাশের সাথে সাথে নির্দিষ্ট সংস্থানগুলিতে অ্যাক্সেস দেওয়ার নিয়মগুলি যুক্ত করুন৷

ক্লাউড ফায়ারস্টোর (উৎপাদন মোড) এবং রিয়েলটাইম ডেটাবেস (লক করা মোড) এর নতুন উদাহরণগুলির জন্য এটি একটি ডিফল্ট সেটিংস৷ একটি নতুন ডাটাবেস দৃষ্টান্ত স্থাপন করার সময় এই বিকল্পটি নির্বাচন করুন৷

ক্লাউড স্টোরেজের জন্য, নিম্নলিখিতগুলির মতো একটি সুরক্ষা নিয়ম কনফিগারেশন দিয়ে শুরু করুন:

rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if false;
    }
  }
}

নিরাপত্তা নিয়ম একটি স্কিমা; আপনি নথি যোগ করার সময় নিয়ম যোগ করুন

আপনার অ্যাপটি লেখার পরে নিরাপত্তা নিয়ম লিখবেন না, এক ধরনের প্রি-লঞ্চ টাস্ক হিসাবে। পরিবর্তে, আপনার অ্যাপটি লেখার সময় নিরাপত্তা নিয়মগুলি লিখুন, সেগুলিকে একটি ডাটাবেস স্কিমার মতো ব্যবহার করুন: যখনই আপনাকে একটি নতুন নথির প্রকার বা পাথ কাঠামো ব্যবহার করতে হবে, প্রথমে এটির নিরাপত্তা নিয়ম লিখুন৷

এমুলেটর স্যুটের সাথে ইউনিট পরীক্ষার নিরাপত্তা নিয়ম; এটি CI এ যোগ করুন

আপনার সুরক্ষা নিয়মগুলি আপনার অ্যাপের বিকাশের সাথে তাল মিলিয়ে চলছে তা নিশ্চিত করতে, ইউনিট Firebase এমুলেটর স্যুটের সাথে আপনার নিয়মগুলি পরীক্ষা করুন এবং এই পরীক্ষাগুলি আপনার CI পাইপলাইনে যোগ করুন৷ ক্লাউড ফায়ারস্টোর এবং রিয়েলটাইম ডেটাবেসের জন্য এই নির্দেশিকাগুলি দেখুন।

প্রমাণীকরণ

কাস্টম প্রমাণীকরণ: একটি বিশ্বস্ত (সার্ভার-সাইড) পরিবেশ থেকে মিন্ট JWTs

আপনার যদি ইতিমধ্যেই একটি নিরাপদ সাইন-ইন সিস্টেম থাকে, তা একটি কাস্টম সিস্টেম হোক বা তৃতীয় পক্ষের পরিষেবা, আপনি Firebase পরিষেবাগুলির সাথে প্রমাণীকরণের জন্য আপনার বিদ্যমান সিস্টেম ব্যবহার করতে পারেন৷ একটি বিশ্বস্ত পরিবেশ থেকে কাস্টম JWT তৈরি করুন , তারপর আপনার ক্লায়েন্টের কাছে টোকেনগুলি প্রেরণ করুন, যা প্রমাণীকরণের জন্য টোকেন ব্যবহার করে ( iOS+ , Android , Web , Unity , C++ )।

তৃতীয় পক্ষের প্রদানকারীর সাথে কাস্টম প্রমাণীকরণ ব্যবহারের উদাহরণের জন্য, ব্লগ পোস্টটি দেখুন, Okta ব্যবহার করে Firebase এর সাথে প্রমাণীকরণ করুন

পরিচালিত প্রমাণীকরণ: OAuth 2.0 প্রদানকারীরা সবচেয়ে নিরাপদ

আপনি যদি Firebase-এর পরিচালিত প্রমাণীকরণ বৈশিষ্ট্যগুলি ব্যবহার করেন, OAuth 2.0 / OpenID Connect প্রদানকারী বিকল্পগুলি (Google, Facebook, ইত্যাদি) সবচেয়ে সুরক্ষিত৷ আপনি যদি পারেন (আপনার ব্যবহারকারীর ভিত্তির উপর নির্ভর করে) তাহলে আপনাকে এই সরবরাহকারীদের এক বা একাধিক সমর্থন করা উচিত।

ইমেল-পাসওয়ার্ড প্রমাণীকরণ: নৃশংস শক্তি আক্রমণ প্রতিরোধ করতে সাইন-ইন শেষ পয়েন্টের জন্য শক্ত কোটা সেট করুন

আপনি যদি Firebase-এর পরিচালিত ইমেল-পাসওয়ার্ড প্রমাণীকরণ পরিষেবা ব্যবহার করেন, তাহলে নৃশংস বল আক্রমণ প্রতিরোধ করতে identitytoolkit.googleapis.com এন্ডপয়েন্টের ডিফল্ট কোটা শক্ত করুন। আপনি Google ক্লাউড কনসোলে API-এর পৃষ্ঠা থেকে তা করতে পারেন।

মাল্টি-ফ্যাক্টর প্রমাণীকরণের জন্য ক্লাউড আইডেন্টিটি প্ল্যাটফর্মে আপগ্রেড করুন

সাইন-ইন করার সময় অতিরিক্ত নিরাপত্তার জন্য, আপনি ক্লাউড আইডেন্টিটি প্ল্যাটফর্মে আপগ্রেড করে মাল্টি-ফ্যাক্টর প্রমাণীকরণ সমর্থন যোগ করতে পারেন। আপনি আপগ্রেড করার পরে আপনার বিদ্যমান ফায়ারবেস প্রমাণীকরণ কোড কাজ করতে থাকবে।

বেনামী প্রমাণীকরণ

উষ্ণ অনবোর্ডিংয়ের জন্য শুধুমাত্র বেনামী প্রমাণীকরণ ব্যবহার করুন

ব্যবহারকারীরা প্রকৃতপক্ষে সাইন ইন করার আগে তাদের মৌলিক অবস্থা সংরক্ষণ করতে শুধুমাত্র বেনামী প্রমাণীকরণ ব্যবহার করুন৷ বেনামী প্রমাণীকরণ ব্যবহারকারীর সাইন-ইন করার জন্য একটি প্রতিস্থাপন নয়৷

ব্যবহারকারীরা তাদের ফোন হারানোর সময় ডেটা চাইলে অন্য সাইন-ইন পদ্ধতিতে রূপান্তর করুন

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

সুরক্ষা নিয়মগুলি ব্যবহার করুন যাতে ব্যবহারকারীদের সাইন ইন প্রদানকারীতে রূপান্তরিত করা বা তাদের ইমেল যাচাই করা প্রয়োজন৷

যে কেউ আপনার প্রকল্পে একটি বেনামী অ্যাকাউন্ট তৈরি করতে পারে। এটি মাথায় রেখে, সমস্ত অ-পাবলিক ডেটা সুরক্ষা নিয়মগুলির সাথে সুরক্ষিত করুন যেগুলির জন্য নির্দিষ্ট সাইন-ইন পদ্ধতি বা যাচাই করা ইমেল ঠিকানাগুলির প্রয়োজন

উদাহরণ স্বরূপ:

allow write: if request.auth.token.firebase.sign_in_provider != "anonymous";
allow write: if request.auth.token.email_verified = true;

পরিবেশ ব্যবস্থাপনা

উন্নয়ন এবং মঞ্চায়ন প্রকল্প সেট আপ করুন

ডেভেলপমেন্ট, স্টেজিং এবং প্রোডাকশনের জন্য আলাদা ফায়ারবেস প্রোজেক্ট সেট আপ করুন। স্টেজিং প্রজেক্টের বিরুদ্ধে পরীক্ষা না হওয়া পর্যন্ত ক্লায়েন্ট কোডকে প্রোডাকশনে মার্জ করবেন না।

প্রোডাকশন ডেটাতে টিমের অ্যাক্সেস সীমিত করুন

আপনি যদি একটি বৃহত্তর দলের সাথে কাজ করেন তবে আপনি পূর্বনির্ধারিত ভূমিকা বা কাস্টম IAM ভূমিকা ব্যবহার করে উত্পাদন ডেটাতে অ্যাক্সেস সীমিত করে ভুল এবং লঙ্ঘনের পরিণতিগুলি হ্রাস করতে পারেন।

যদি আপনার দল উন্নয়নের জন্য এমুলেটর স্যুট ব্যবহার করে, তাহলে আপনাকে প্রোডাকশন প্রজেক্টে বৃহত্তর অ্যাক্সেস দেওয়ার প্রয়োজন নাও হতে পারে।

গ্রন্থাগার ব্যবস্থাপনা

লাইব্রেরির ভুল বানান বা নতুন রক্ষণাবেক্ষণকারীদের জন্য সতর্ক থাকুন

আপনার প্রোজেক্টে লাইব্রেরি যোগ করার সময়, লাইব্রেরির নাম এবং এর রক্ষণাবেক্ষণকারীদের প্রতি গভীর মনোযোগ দিন। আপনি যেটি ইনস্টল করতে চান তার অনুরূপ-নামযুক্ত লাইব্রেরিতে ক্ষতিকারক কোড থাকতে পারে।

পরিবর্তনগুলি না বুঝে লাইব্রেরি আপডেট করবেন না

আপগ্রেড করার আগে আপনার ব্যবহার করা যেকোনো লাইব্রেরির পরিবর্তন লগগুলি দেখুন। আপগ্রেড মান যোগ করে তা নিশ্চিত করুন এবং রক্ষণাবেক্ষণকারী এখনও আপনার বিশ্বাসযোগ্য একটি পক্ষ কিনা তা পরীক্ষা করুন।

ডেভ বা টেস্ট নির্ভরতা হিসাবে ওয়াচডগ লাইব্রেরি ইনস্টল করুন

অনিরাপদ নির্ভরতার জন্য আপনার প্রকল্প স্ক্যান করতে Snyk-এর মতো একটি লাইব্রেরি ব্যবহার করুন।

ফাংশনের জন্য মনিটরিং সেট আপ করুন; লাইব্রেরি আপডেটের পরে এটি পরীক্ষা করুন

আপনি যদি ক্লাউড ফাংশন লগার SDK ব্যবহার করেন, আপনি লাইব্রেরি আপডেটের কারণে সৃষ্ট আচরণ সহ অস্বাভাবিক আচরণের নিরীক্ষণ এবং সতর্ক হতে পারেন।

ক্লাউড ফাংশন নিরাপত্তা

ক্লাউড ফাংশনের পরিবেশ ভেরিয়েবলে কখনোই সংবেদনশীল তথ্য রাখবেন না

প্রায়ই একটি স্ব-হোস্ট করা Node.js অ্যাপে, আপনি ব্যক্তিগত কীগুলির মতো সংবেদনশীল তথ্য ধারণ করতে পরিবেশের ভেরিয়েবল ব্যবহার করেন। ক্লাউড ফাংশনে এটি করবেন না । যেহেতু ক্লাউড ফাংশনগুলি ফাংশন আহ্বানের মধ্যে পরিবেশগুলিকে পুনরায় ব্যবহার করে, তাই সংবেদনশীল তথ্য পরিবেশে সংরক্ষণ করা উচিত নয়৷

  • Firebase API কীগুলি সংরক্ষণ করতে, যেগুলি গোপন নয় , শুধু কোডে এম্বেড করুন৷
  • আপনি যদি একটি ক্লাউড ফাংশনে Firebase অ্যাডমিন SDK ব্যবহার করেন, তাহলে আপনাকে স্পষ্টভাবে পরিষেবা অ্যাকাউন্টের শংসাপত্রগুলি প্রদান করতে হবে না, কারণ SDK স্বয়ংক্রিয়ভাবে শুরু করার সময় সেগুলি অর্জন করতে পারে৷
  • আপনি যদি Google এবং Google ক্লাউড API-কে কল করেন যার জন্য পরিষেবা অ্যাকাউন্টের শংসাপত্রের প্রয়োজন হয়, তাহলে Node.js-এর জন্য Google Auth লাইব্রেরি অ্যাপ্লিকেশন ডিফল্ট শংসাপত্রগুলি থেকে এই শংসাপত্রগুলি পেতে পারে, যেগুলি স্বয়ংক্রিয়ভাবে ক্লাউড ফাংশনে জমা হয়৷
  • আপনার ক্লাউড ফাংশনগুলিতে অ-Google পরিষেবাগুলির জন্য ব্যক্তিগত কী এবং শংসাপত্রগুলি উপলব্ধ করতে, ক্লাউড সিক্রেট ম্যানেজার ব্যবহার করুন৷

সংবেদনশীল তথ্য এনক্রিপ্ট করুন

আপনি যদি আপনার ক্লাউড ফাংশনে সংবেদনশীল তথ্য পাস করা এড়াতে না পারেন, তাহলে আপনাকে অবশ্যই তথ্য এনক্রিপ্ট করতে আপনার নিজস্ব কাস্টম সমাধান নিয়ে আসতে হবে।

সহজ ফাংশন নিরাপদ; আপনার যদি জটিলতার প্রয়োজন হয়, ক্লাউড রান বিবেচনা করুন

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

আপনার যদি জটিল যুক্তি বা পরিবেশ কনফিগারেশনের প্রয়োজন হয়, তাহলে ক্লাউড ফাংশনের পরিবর্তে ক্লাউড রান ব্যবহার করার কথা বিবেচনা করুন।