Firebase Security Rules কনফিগারেশনের সাধারণ দুর্বলতাগুলো বুঝতে, আপনার নিজের রুলগুলো পর্যালোচনা করে আরও সুরক্ষিত করতে এবং পরিবর্তনগুলো প্রয়োগ করার আগে পরীক্ষা করতে এই নির্দেশিকাটি ব্যবহার করুন।
আপনার ডেটা সঠিকভাবে সুরক্ষিত নয় এমন কোনো সতর্কতা পেলে, এই সাধারণ ভুলগুলো পর্যালোচনা করুন এবং ঝুঁকিপূর্ণ নিয়মগুলো হালনাগাদ করুন।
আপনার Firebase Security Rules অ্যাক্সেস করুন
আপনার বিদ্যমান Security Rules দেখতে, Firebase CLI অথবা Firebase কনসোল ব্যবহার করুন। ভুলবশত আপডেট ওভাররাইট হওয়া এড়াতে, নিশ্চিত করুন যে আপনি ধারাবাহিকভাবে একই পদ্ধতি ব্যবহার করে আপনার নিয়মগুলো সম্পাদনা করছেন। আপনার স্থানীয়ভাবে সংজ্ঞায়িত নিয়মগুলো সর্বশেষ আপডেটগুলো প্রতিফলিত করছে কিনা সে বিষয়ে আপনি নিশ্চিত না হলে, Firebase কনসোল সর্বদা আপনার Firebase Security Rules সর্বশেষ ডেপ্লয় করা সংস্করণটি দেখায়।
Firebase কনসোল থেকে আপনার নিয়মগুলো অ্যাক্সেস করতে, আপনার প্রজেক্টটি নির্বাচন করুন, তারপর Realtime Database , Cloud Firestore বা Storage- এ যান। সঠিক ডেটাবেস বা স্টোরেজ বাকেটে প্রবেশ করার পর Rules-এ ক্লিক করুন।
Firebase CLI থেকে আপনার নিয়মগুলো অ্যাক্সেস করতে, আপনার firebase.json ফাইলে উল্লিখিত rules ফাইলটিতে যান।
Firebase Security Rules বুঝুন
Firebase Security Rules আপনার ডেটাকে ক্ষতিকারক ব্যবহারকারীদের থেকে সুরক্ষিত রাখে। যখন আপনি Firebase কনসোলে একটি ডাটাবেস ইনস্ট্যান্স বা Cloud Storage বাকেট তৈরি করেন, তখন আপনি সকল ব্যবহারকারীর অ্যাক্সেস অস্বীকার ( লকড মোড ) অথবা সকল ব্যবহারকারীকে অ্যাক্সেস মঞ্জুর ( টেস্ট মোড ) করার বিকল্প বেছে নিতে পারেন। যদিও ডেভেলপমেন্টের সময় আপনি আরও উন্মুক্ত কনফিগারেশন চাইতে পারেন, আপনার অ্যাপটি ডেপ্লয় করার আগে আপনার রুলসগুলো সঠিকভাবে কনফিগার করতে এবং আপনার ডেটা সুরক্ষিত করতে সময় নিন।
আপনার অ্যাপ তৈরি করার সময় এবং রুলগুলোর বিভিন্ন কনফিগারেশন পরীক্ষা করার সময়, অ্যাপটিকে একটি লোকাল ডেভেলপমেন্ট এনভায়রনমেন্টে চালানোর জন্য স্থানীয় ফায়ারবেস এমুলেটরগুলোর মধ্যে একটি ব্যবহার করুন।
অনিরাপদ নিয়মগুলির সাথে সাধারণ পরিস্থিতি
আপনার অ্যাপটি ডেপ্লয় করার আগে, ডিফল্ট হিসেবে অথবা অ্যাপটি তৈরির প্রাথমিক পর্যায়ে সেট করা Security Rules পর্যালোচনা ও আপডেট করা উচিত। নিম্নলিখিত সাধারণ ভুলগুলো এড়িয়ে আপনার ব্যবহারকারীদের ডেটা যথাযথভাবে সুরক্ষিত করা নিশ্চিত করুন।
উন্মুক্ত প্রবেশাধিকার
আপনার ফায়ারবেস প্রজেক্ট সেট আপ করার সময়, আপনি হয়তো ডেভেলপমেন্ট পর্যায়ে উন্মুক্ত অ্যাক্সেসের অনুমতি দেওয়ার জন্য নিয়ম সেট করে রেখেছেন। আপনি হয়তো ভাবছেন যে আপনার অ্যাপটি শুধু আপনিই ব্যবহার করছেন, কিন্তু যদি আপনি এটি ডেপ্লয় করে থাকেন, তবে এটি ইন্টারনেটে উপলব্ধ। আপনি যদি ব্যবহারকারীদের প্রমাণীকরণ না করেন এবং নিরাপত্তা নিয়ম কনফিগার না করেন, তাহলে যে কেউ আপনার প্রজেক্ট আইডি অনুমান করে ডেটা চুরি, পরিবর্তন বা মুছে ফেলতে পারে।
সুপারিশ করা হয় না: সকল ব্যবহারকারীর জন্য পঠন ও লিখন প্রবেশাধিকার। Cloud Firestore// Allow read/write access to all users under any conditions // Warning: **NEVER** use this ruleset in production; it allows // anyone to overwrite your entire database. service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write: if true; } } } Realtime Database{ // Allow read/write access to all users under any conditions // Warning: **NEVER** use this ruleset in production; it allows // anyone to overwrite your entire database. "rules": { ".read": true, ".write": true } } Cloud Storage// Anyone can read or write to the bucket, even non-users of your app. // Because it is shared with App Engine, this will also make // files uploaded using App Engine public. // Warning: This rule makes every file in your Cloud Storage bucket accessible to any user. // Apply caution before using it in production, since it means anyone // can overwrite all your files. service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { allow read, write; } } } |
| সমাধান: পঠন ও লিখন প্রবেশাধিকার সীমিত করার নিয়মাবলী। আপনার ডেটা হায়ারার্কির জন্য উপযুক্ত নিয়ম তৈরি করুন। এই নিরাপত্তাহীনতার একটি সাধারণ সমাধান হলো Firebase Authentication ব্যবহার করে ব্যবহারকারী-ভিত্তিক নিরাপত্তা। নিয়মের সাহায্যে ব্যবহারকারীদের প্রমাণীকরণ সম্পর্কে আরও জানুন। Cloud FirestoreRealtime DatabaseCloud Storage |
যেকোনো প্রমাণীকৃত ব্যবহারকারীর জন্য প্রবেশাধিকার
কখনও কখনও, Security Rules পরীক্ষা করে দেখে যে একজন ব্যবহারকারী লগ ইন করেছেন কিনা, কিন্তু সেই প্রমাণীকরণের উপর ভিত্তি করে অ্যাক্সেসকে আরও সীমাবদ্ধ করে না। যদি আপনার কোনো নিয়মে auth != null অন্তর্ভুক্ত থাকে, তাহলে নিশ্চিত করুন যে আপনি চান যেকোনো লগ-ইন করা ব্যবহারকারী ডেটা অ্যাক্সেস করতে পারুক।
সুপারিশ করা হয় না: যেকোনো লগ-ইন করা ব্যবহারকারীর আপনার সম্পূর্ণ ডেটাবেসে পড়া এবং লেখার অ্যাক্সেস রয়েছে। Cloud Firestoreservice cloud.firestore { match /databases/{database}/documents { match /some_collection/{document} { allow read, write: if request.auth.uid != null; } } } Realtime Database{
"rules": {
".read": "auth.uid !== null",
".write": "auth.uid !== null"
}
}Cloud Storage// Only authenticated users can read or write to the bucket service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { allow read, write: if request.auth != null; } } } |
| সমাধান: নিরাপত্তা শর্ত ব্যবহার করে প্রবেশাধিকার সীমিত করা। প্রমাণীকরণ যাচাই করার সময়, নির্দিষ্ট ডেটা সেটের জন্য নির্দিষ্ট ব্যবহারকারীদের অ্যাক্সেস আরও সীমাবদ্ধ করতে আপনি প্রমাণীকরণ প্রপার্টিগুলোর মধ্যে একটি ব্যবহার করতে চাইতে পারেন। বিভিন্ন প্রমাণীকরণ প্রপার্টি সম্পর্কে আরও জানুন। Cloud FirestoreRealtime DatabaseCloud Storage |
( Realtime Database ) ভুলভাবে উত্তরাধিকারসূত্রে প্রাপ্ত নিয়মাবলী
Realtime Database Security Rules ক্যাসকেড পদ্ধতিতে কাজ করে, যেখানে অপেক্ষাকৃত অগভীর প্যারেন্ট পাথের নিয়মগুলো গভীরতর চাইল্ড নোডের নিয়মগুলোকে ওভাররাইড করে। যখন আপনি কোনো চাইল্ড নোডে একটি নিয়ম লেখেন, তখন মনে রাখবেন যে এটি শুধুমাত্র অতিরিক্ত প্রিভিলেজ বা সুবিধা প্রদান করতে পারে। আপনি আপনার ডেটাবেসের কোনো গভীরতর পাথের ডেটার অ্যাক্সেস পরিমার্জন বা প্রত্যাহার করতে পারবেন না।
সুপারিশ করা হয় না: চাইল্ড পাথে নিয়ম পরিমার্জন করা {
"rules": {
"foo": {
// allows read to /foo/*
".read": "data.child('baz').val() === true",
"bar": {
/* ignored, since read was allowed already */
".read": false
}
}
}
} |
| সমাধান: প্যারেন্ট পাথে ব্যাপক নিয়ম লিখুন এবং চাইল্ড পাথে আরও সুনির্দিষ্ট সুবিধা দিন। যদি আপনার ডেটা অ্যাক্সেসের প্রয়োজনে আরও সূক্ষ্ম নিয়ন্ত্রণের প্রয়োজন হয়, তবে আপনার নিয়মগুলোকে সূক্ষ্ম রাখুন। Realtime Database Security Rules -এর কোর সিনট্যাক্স -এ ক্যাসকেডিং Realtime Database Security Rules সিকিউরিটি রুলস সম্পর্কে আরও জানুন। |
বন্ধ প্রবেশাধিকার
আপনার অ্যাপ তৈরি করার সময়, ডেটা সুরক্ষিত রাখা আরেকটি প্রচলিত পদ্ধতি। সাধারণত, এর মানে হলো আপনি সকল ব্যবহারকারীর জন্য ডেটা পড়া এবং লেখার অ্যাক্সেস বন্ধ করে দিয়েছেন, যেমনটা নিচে দেখানো হলো:
Cloud Firestore
// Deny read/write access to all users under any conditions service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write: if false; } } }
Realtime Database
{
"rules": {
".read": false,
".write": false
}
}
Cloud Storage
// Access to files through Cloud Storage is completely disallowed. // Files may still be accessible through App Engine or Google Cloud Storage APIs. service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { allow read, write: if false; } } }
Firebase Admin SDK এবং Cloud Functions এখনও আপনার ডেটাবেস অ্যাক্সেস করতে পারে। যখন আপনি Firebase Admin SDK-এর সাথে Cloud Firestore বা Realtime Database শুধুমাত্র সার্ভার-ভিত্তিক ব্যাকএন্ড হিসেবে ব্যবহার করতে চান, তখন এই নিয়মগুলো ব্যবহার করুন। যদিও এটি সুরক্ষিত, আপনার অ্যাপের ক্লায়েন্টরা সঠিকভাবে ডেটা পুনরুদ্ধার করতে পারছে কিনা তা পরীক্ষা করে দেখা উচিত।
Cloud Firestore Security Rules এবং এগুলি কীভাবে কাজ করে সে সম্পর্কে আরও জানতে Cloud Firestore Security Rules দিয়ে শুরু করুন" অংশটি দেখুন ।
আপনার Cloud Firestore Security Rules পরীক্ষা করুন
আপনার অ্যাপের আচরণ পরীক্ষা করতে এবং আপনার Cloud Firestore Security Rules কনফিগারেশন যাচাই করতে, ফায়ারবেস এমুলেটর ব্যবহার করুন। যেকোনো পরিবর্তন স্থাপন করার আগে স্থানীয় পরিবেশে ইউনিট টেস্ট চালানো এবং স্বয়ংক্রিয় করতে Cloud Firestore এমুলেটর ব্যবহার করুন।
Firebase কনসোলে Firebase Security Rules দ্রুত যাচাই করতে, Firebase Rules Simulator ব্যবহার করুন।