Cloud Firestore Security Rules কনফিগারেশনের সাধারণ দুর্বলতাগুলি বুঝতে, আপনার নিজের নিয়মগুলি পর্যালোচনা এবং আরও ভালভাবে সুরক্ষিত করতে এবং সেগুলি স্থাপন করার আগে আপনার পরিবর্তনগুলি পরীক্ষা করতে এই নির্দেশিকাটি ব্যবহার করুন৷
আপনি যদি একটি সতর্কতা পান যে আপনার Cloud Firestore ডেটাবেস সঠিকভাবে সুরক্ষিত নয়, আপনি আপনার Cloud Firestore Security Rules সংশোধন এবং পরীক্ষা করে দুর্বলতাগুলি সমাধান করতে পারেন৷
আপনার বিদ্যমান নিরাপত্তা বিধিগুলি দেখতে, Firebase কনসোলের নিয়ম ট্যাবে যান৷
আপনার Cloud Firestore Security Rules বুঝুন৷
Cloud Firestore Security Rules আপনার ডেটাকে ক্ষতিকারক ব্যবহারকারীদের থেকে রক্ষা করে। Firebase কনসোলে তৈরি যেকোন Cloud Firestore ইন্সট্যান্সের জন্য ডিফল্ট নিয়ম সমস্ত ব্যবহারকারীর অ্যাক্সেস অস্বীকার করে। আপনার অ্যাপ বিকাশ করতে এবং আপনার ডাটাবেস অ্যাক্সেস করতে, আপনাকে সেই নিয়মগুলি সংশোধন করতে হবে এবং একটি উন্নয়ন পরিবেশে সমস্ত ব্যবহারকারীকে কম্বল অ্যাক্সেস দেওয়ার বিষয়টি বিবেচনা করতে পারে৷ একটি উত্পাদন পরিবেশে আপনার অ্যাপ স্থাপন করার আগে, তবে, আপনার নিয়মগুলি সঠিকভাবে কনফিগার করতে এবং আপনার ডেটা সুরক্ষিত করার জন্য সময় নিন।
আপনি যখন আপনার অ্যাপটি তৈরি করছেন এবং আপনার নিয়মের জন্য বিভিন্ন কনফিগারেশন পরীক্ষা করছেন, তখন স্থানীয় উন্নয়ন পরিবেশে আপনার অ্যাপ চালানোর জন্য Cloud Firestore এমুলেটর ব্যবহার করুন।
অনিরাপদ নিয়ম সহ সাধারণ পরিস্থিতি
আপনি যে Cloud Firestore Security Rules ডিফল্টরূপে সেট আপ করেছেন বা Cloud Firestore সাথে আপনার অ্যাপ তৈরি করার জন্য প্রাথমিকভাবে কাজ করেছেন সেগুলি আপনার অ্যাপ স্থাপন করার আগে পর্যালোচনা এবং আপডেট করা উচিত। নিশ্চিত করুন যে আপনি নিম্নলিখিত সাধারণ সমস্যাগুলি এড়িয়ে আপনার ব্যবহারকারীদের ডেটা সঠিকভাবে সুরক্ষিত করেছেন৷
খোলা অ্যাক্সেস
আপনি Cloud Firestore সেট আপ করার সময়, আপনি বিকাশের সময় খোলা অ্যাক্সেসের অনুমতি দেওয়ার জন্য আপনার নিয়মগুলি সেট করে থাকতে পারেন৷ আপনি ভাবতে পারেন যে আপনিই একমাত্র ব্যক্তি যিনি আপনার অ্যাপ ব্যবহার করছেন, কিন্তু আপনি যদি এটি ব্যবহার করে থাকেন তবে এটি ইন্টারনেটে উপলব্ধ। আপনি যদি ব্যবহারকারীদের প্রমাণীকরণ না করেন এবং নিরাপত্তা বিধি কনফিগার না করেন, তাহলে যে কেউ আপনার প্রকল্প আইডি অনুমান করে সে ডেটা চুরি, পরিবর্তন বা মুছে ফেলতে পারে।
বাঞ্ছনীয় নয়: সমস্ত ব্যবহারকারীদের পড়ার এবং লেখার অ্যাক্সেস। |
// Allow read/write access to all users under any conditions // Warning: **NEVER** use this rule set in production; it allows // anyone to overwrite your entire database. service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write: if true; } } }
সমাধান: নিয়মগুলি যা পড়ার এবং লেখার অ্যাক্সেসকে সীমাবদ্ধ করে। নিয়মগুলি তৈরি করুন যা আপনার ডেটা অনুক্রমের জন্য অর্থপূর্ণ। এই নিরাপত্তাহীনতার সাধারণ সমাধানগুলির মধ্যে একটি হল Firebase Authentication সাথে ব্যবহারকারী-ভিত্তিক নিরাপত্তা। নিয়ম সহ ব্যবহারকারীদের প্রমাণীকরণ সম্পর্কে আরও জানুন। |
শুধুমাত্র বিষয়বস্তুর মালিক
service cloud.firestore { match /databases/{database}/documents { // Allow only authenticated content owners access match /some_collection/{document} { // Allow reads and deletion if the current user owns the existing document allow read, delete: if request.auth.uid == resource.data.author_uid; // Allow creation if the current user owns the new document allow create: if request.auth.uid == request.resource.data.author_uid; // Allow updates by the owner, and prevent change of ownership allow update: if request.auth.uid == request.resource.data.author_uid && request.auth.uid == resource.data.author_uid; } } }
মিশ্র পাবলিক এবং ব্যক্তিগত অ্যাক্সেস
service cloud.firestore { match /databases/{database}/documents { // Allow public read access, but only content owners can write match /some_collection/{document} { // Allow public reads allow read: if true // Allow creation if the current user owns the new document allow create: if request.auth.uid == request.resource.data.author_uid; // Allow updates by the owner, and prevent change of ownership allow update: if request.auth.uid == request.resource.data.author_uid && request.auth.uid == resource.data.author_uid; // Allow deletion if the current user owns the existing document allow delete: if request.auth.uid == resource.data.author_uid; } } }
কোনো প্রমাণীকৃত ব্যবহারকারীর জন্য অ্যাক্সেস
কখনও কখনও, Cloud Firestore Security Rules পরীক্ষা করে যে কোনও ব্যবহারকারী লগ ইন করেছেন, তবে সেই প্রমাণীকরণের উপর ভিত্তি করে অ্যাক্সেসকে আরও সীমাবদ্ধ করবেন না। যদি আপনার নিয়মগুলির মধ্যে একটিতে auth != null
অন্তর্ভুক্ত থাকে, তাহলে নিশ্চিত করুন যে আপনি যেকোনো লগ-ইন ব্যবহারকারীর ডেটাতে অ্যাক্সেস পেতে চান।
প্রস্তাবিত নয়: যেকোন লগ-ইন ব্যবহারকারী আপনার সম্পূর্ণ ডাটাবেসে পড়ার এবং লেখার অ্যাক্সেস পেয়েছে। |
service cloud.firestore { match /databases/{database}/documents { match /some_collection/{document} { allow read, write: if request.auth != null; } } }
সমাধান: নিরাপত্তা শর্ত ব্যবহার করে সংকীর্ণ অ্যাক্সেস। আপনি যখন প্রমাণীকরণের জন্য পরীক্ষা করছেন, আপনি নির্দিষ্ট ডেটা সেটের জন্য নির্দিষ্ট ব্যবহারকারীদের অ্যাক্সেসকে আরও সীমাবদ্ধ করতে প্রমাণীকরণ বৈশিষ্ট্যগুলির একটি ব্যবহার করতে চাইতে পারেন। নিরাপত্তা শর্ত এবং ভূমিকা-ভিত্তিক অ্যাক্সেস যোগ করার বিষয়ে আরও জানুন। |
ভূমিকা-ভিত্তিক অ্যাক্সেস
service cloud.firestore { match /databases/{database}/documents { // Assign roles to all users and refine access based on user roles match /some_collection/{document} { allow read: if request.auth != null && get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == "Reader" allow write: if request.auth != null && get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == "Writer" // Note: Checking for roles in your database using `get` (as in the code // above) or `exists` carry standard charges for read operations. } } }
অ্যাট্রিবিউট-ভিত্তিক অ্যাক্সেস
// Give each user in your database a particular attribute // and set it to true/false // Then, use that attribute to grant access to subsets of data // For example, an "admin" attribute set // to "true" grants write access to data service cloud.firestore { match /databases/{database}/documents { match /collection/{document} { allow write: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.admin == true; allow read: true; } } }
মিশ্র পাবলিক এবং ব্যক্তিগত অ্যাক্সেস
service cloud.firestore { match /databases/{database}/documents { // Allow public read access, but only content owners can write match /some_collection/{document} { allow read: if true allow write: if request.auth.uid == request.resource.data.author_uid } } }
বন্ধ অ্যাক্সেস
আপনি যখন আপনার অ্যাপটি তৈরি করছেন, তখন আরেকটি সাধারণ পদ্ধতি হল আপনার ডেটা লক ডাউন রাখা। সাধারণত, এর মানে হল যে আপনি সমস্ত ব্যবহারকারীর পড়ার এবং লেখার অ্যাক্সেস বন্ধ করে দিয়েছেন, নিম্নরূপ:
// Deny read/write access to all users under any conditions
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if false;
}
}
}
Firebase অ্যাডমিন SDK এবং ক্লাউড ফাংশন এখনও আপনার ডাটাবেস অ্যাক্সেস করতে পারে। আপনি যখন Firebase অ্যাডমিন SDK-এর সাথে একত্রে Cloud Firestore শুধুমাত্র সার্ভার-ব্যাকএন্ড হিসাবে ব্যবহার করতে চান তখন এই নিয়মগুলি ব্যবহার করুন৷ এটি সুরক্ষিত থাকাকালীন, আপনার পরীক্ষা করা উচিত যে আপনার অ্যাপের ক্লায়েন্টরা সঠিকভাবে ডেটা পুনরুদ্ধার করতে পারে।
Cloud Firestore Security Rules সম্পর্কে আরও জানুন এবং Cloud Firestore Security Rules সাথে শুরু করুন এ কীভাবে তারা কাজ করে।
আপনার Cloud Firestore Security Rules পরীক্ষা করুন৷
আপনার অ্যাপের আচরণ পরীক্ষা করতে এবং আপনার Cloud Firestore Security Rules কনফিগারেশন যাচাই করতে, Cloud Firestore এমুলেটর ব্যবহার করুন। আপনি কোনো পরিবর্তন স্থাপন করার আগে স্থানীয় পরিবেশে ইউনিট পরীক্ষা চালানো এবং স্বয়ংক্রিয় করতে Cloud Firestore এমুলেটর ব্যবহার করুন।
ফায়ারবেস কনসোলে আপনার আপডেট করা Cloud Firestore Security Rules দ্রুত পরীক্ষা করতে, নিয়ম খেলার মাঠ টুলটি ব্যবহার করুন৷
- নিয়ম খেলার মাঠ খুলতে, নিয়ম ট্যাব থেকে নিয়ম খেলার মাঠ-এ ক্লিক করুন।
- নিয়ম খেলার মাঠের সেটিংসে, আপনার পরীক্ষার জন্য বিকল্পগুলি নির্বাচন করুন, যার মধ্যে রয়েছে:
- পরীক্ষা পড়া বা লেখা
- আপনার ডাটাবেসের একটি নির্দিষ্ট অবস্থান , একটি পথ হিসাবে
- প্রমাণীকরণের ধরন — অপ্রমাণিত, প্রমাণীকৃত বেনামী ব্যবহারকারী, বা একটি নির্দিষ্ট ব্যবহারকারী আইডি
- ডকুমেন্ট-নির্দিষ্ট ডেটা যা আপনার নিয়মগুলি বিশেষভাবে উল্লেখ করে (উদাহরণস্বরূপ, যদি আপনার নিয়মগুলি লেখার অনুমতি দেওয়ার আগে একটি নির্দিষ্ট ক্ষেত্রের উপস্থিতির প্রয়োজন হয়)
- Run-এ ক্লিক করুন এবং নিয়ম উইন্ডোর উপরের ব্যানারে ফলাফল দেখুন।