ফায়ারবেস রিয়েলটাইম ডাটাবেস সিকিউরিটি রুলস নির্ধারণ করে যে আপনার ডাটাবেসে কে রিড এবং রাইটিং অ্যাক্সেস পেয়েছে, আপনার ডাটা কীভাবে গঠন করা হয়েছে এবং কোন সূচী বিদ্যমান। এই রুলসগুলি ফায়ারবেস সার্ভারে লাইভ এবং সর্বদা স্বয়ংক্রিয়ভাবে প্রয়োগ করা হয়। প্রতিটি রিড এবং রাইটিং অনুরোধ শুধুমাত্র তখনই সম্পন্ন হবে যদি আপনার রুলস এটির অনুমতি দেয়। ডিফল্টরূপে, আপনার রুলস কাউকে আপনার ডাটাবেসে অ্যাক্সেসের অনুমতি দেয় না। এটি আপনার ডাটাবেসকে অপব্যবহার থেকে রক্ষা করার জন্য যতক্ষণ না আপনার নিয়মগুলি কাস্টমাইজ করার বা প্রমাণীকরণ সেট আপ করার সময় থাকে।
রিয়েলটাইম ডাটাবেস সিকিউরিটি রুলসের একটি জাভাস্ক্রিপ্টের মতো সিনট্যাক্স রয়েছে এবং এটি চার ধরণের হয়:
| নিয়মের ধরণ | |
|---|---|
| .পড়ুন | ব্যবহারকারীদের দ্বারা ডেটা পড়ার অনুমতি দেওয়া হয় কিনা এবং কখন তা বর্ণনা করে। |
| .লেখা | ডেটা লেখার অনুমতি আছে কিনা এবং কখন তা বর্ণনা করে। |
| .যাচাই করা | একটি সঠিকভাবে ফর্ম্যাট করা মান কেমন দেখাবে, এতে চাইল্ড অ্যাট্রিবিউট আছে কিনা এবং ডেটা টাইপ কী তা নির্ধারণ করে। |
| .ইন্ডেক্সঅন | অর্ডার এবং কোয়েরি সমর্থন করার জন্য একটি চাইল্ডকে ইনডেক্সে নির্দিষ্ট করে। |
Realtime Database নিরাপত্তা ওভারভিউ
Firebase Realtime Database আপনার অ্যাপের নিরাপত্তা পরিচালনার জন্য সম্পূর্ণ সরঞ্জাম সরবরাহ করে। এই সরঞ্জামগুলি আপনার ব্যবহারকারীদের প্রমাণীকরণ, ব্যবহারকারীর অনুমতি প্রয়োগ এবং ইনপুট যাচাই করা সহজ করে তোলে।
ফায়ারবেস-চালিত অ্যাপগুলি অন্যান্য অনেক প্রযুক্তি স্ট্যাকের তুলনায় বেশি ক্লায়েন্ট-সাইড কোড চালায়। অতএব, আমরা যেভাবে সুরক্ষার সাথে যোগাযোগ করি তা আপনার অভ্যস্তের চেয়ে কিছুটা আলাদা হতে পারে।
প্রমাণীকরণ
আপনার অ্যাপ সুরক্ষিত করার প্রথম ধাপ হল আপনার ব্যবহারকারীদের সনাক্ত করা। এই প্রক্রিয়াটিকে প্রমাণীকরণ বলা হয়। আপনি আপনার অ্যাপে ব্যবহারকারীদের সাইন ইন করার জন্য Firebase প্রমাণীকরণ ব্যবহার করতে পারেন। Firebase প্রমাণীকরণে Google এবং Facebook এর মতো সাধারণ প্রমাণীকরণ পদ্ধতির জন্য ড্রপ-ইন সমর্থন, সেইসাথে ইমেল এবং পাসওয়ার্ড লগইন, বেনামী লগইন এবং আরও অনেক কিছু অন্তর্ভুক্ত রয়েছে।
ব্যবহারকারীর পরিচয় একটি গুরুত্বপূর্ণ নিরাপত্তা ধারণা। বিভিন্ন ব্যবহারকারীর বিভিন্ন ডেটা থাকে এবং কখনও কখনও তাদের বিভিন্ন ক্ষমতা থাকে। উদাহরণস্বরূপ, একটি চ্যাট অ্যাপ্লিকেশনে, প্রতিটি বার্তা সেই ব্যবহারকারীর সাথে যুক্ত থাকে যিনি এটি তৈরি করেছেন। ব্যবহারকারীরা তাদের নিজস্ব বার্তাগুলি মুছে ফেলতেও সক্ষম হতে পারেন, কিন্তু অন্য ব্যবহারকারীদের দ্বারা পোস্ট করা বার্তাগুলি নয়।
অনুমোদন
আপনার ব্যবহারকারীকে শনাক্ত করা নিরাপত্তার অংশ মাত্র। একবার আপনি যখন তাদের পরিচয় জানতে পারবেন, তখন আপনার ডাটাবেসের ডেটাতে তাদের অ্যাক্সেস নিয়ন্ত্রণ করার একটি উপায় প্রয়োজন। রিয়েলটাইম ডাটাবেস সুরক্ষা নিয়ম আপনাকে প্রতিটি ব্যবহারকারীর জন্য অ্যাক্সেস নিয়ন্ত্রণ করতে দেয়। উদাহরণস্বরূপ, এখানে সুরক্ষা নিয়মের একটি সেট রয়েছে যা যে কেউ /foo/ পাথটি পড়তে দেয়, কিন্তু কেউ এটিতে লিখতে দেয় না:
{
"rules": {
"foo": {
".read": true,
".write": false
}
}
} .read এবং .write নিয়মগুলি ক্যাসকেড করা হয়, তাই এই নিয়ম সেটটি /foo/ পাথের যেকোনো ডেটার পাশাপাশি /foo/bar/baz এর মতো যেকোনো গভীর পাথের পঠন অ্যাক্সেস দেয়। মনে রাখবেন যে ডাটাবেসে .read এবং .write নিয়মগুলি অগভীর নিয়মগুলিকে ওভাররাইড করে, তাই /foo/bar/baz এ পঠন অ্যাক্সেস এই উদাহরণে এখনও মঞ্জুর করা হবে, এমনকি যদি /foo/bar/baz কোনো নিয়ম মিথ্যা হিসাবে মূল্যায়ন করা হয়।
রিয়েলটাইম ডাটাবেস সিকিউরিটি রুলস -এ অন্তর্নির্মিত ভেরিয়েবল এবং ফাংশন অন্তর্ভুক্ত রয়েছে যা আপনাকে অন্যান্য পাথ, সার্ভার-সাইড টাইমস্ট্যাম্প, প্রমাণীকরণ তথ্য এবং আরও অনেক কিছু উল্লেখ করতে দেয়। এখানে একটি নিয়মের উদাহরণ দেওয়া হল যা প্রমাণিত ব্যবহারকারীদের /users/<uid>/ এ লেখার অ্যাক্সেস দেয়, যেখানে <uid> হল Firebase Authentication মাধ্যমে প্রাপ্ত ব্যবহারকারীর ID।
{
"rules": {
"users": {
"$uid": {
".write": "$uid === auth.uid"
}
}
}
}ডেটা যাচাইকরণ
Firebase Realtime Database স্কিমালেস। এটি আপনার ডেভেলপমেন্টের সাথে সাথে জিনিসগুলি পরিবর্তন করা সহজ করে তোলে, কিন্তু একবার আপনার অ্যাপ বিতরণের জন্য প্রস্তুত হয়ে গেলে, ডেটার জন্য সামঞ্জস্যপূর্ণ থাকা গুরুত্বপূর্ণ। নিয়মের ভাষাতে একটি .validate নিয়ম রয়েছে যা আপনাকে .read এবং .write নিয়মের জন্য ব্যবহৃত একই এক্সপ্রেশন ব্যবহার করে বৈধতা যুক্তি প্রয়োগ করতে দেয়। একমাত্র পার্থক্য হল বৈধতা নিয়মগুলি ক্যাসকেড হয় না , তাই লেখার অনুমতি দেওয়ার জন্য সমস্ত প্রাসঙ্গিক বৈধতা নিয়মগুলিকে সত্য হিসাবে মূল্যায়ন করতে হবে।
এই নিয়মগুলি বাধ্য করে যে /foo/ তে লেখা ডেটা অবশ্যই ১০০ অক্ষরের কম স্ট্রিং হতে হবে:
{
"rules": {
"foo": {
".validate": "newData.isString() && newData.val().length < 100"
}
}
} ভ্যালিডেশন রুলসের .read এবং .write রুলসের মতো একই বিল্ট-ইন ফাংশন এবং ভেরিয়েবলগুলিতে অ্যাক্সেস রয়েছে। আপনি এই রুলস ব্যবহার করে ভ্যালিডেশন রুলস তৈরি করতে পারেন যা আপনার ডাটাবেসের অন্য কোথাও ডেটা, আপনার ব্যবহারকারীর পরিচয়, সার্ভার সময় এবং আরও অনেক কিছু সম্পর্কে সচেতন।
ডাটাবেস সূচী নির্ধারণ করা
Firebase Realtime Database ডেটা অর্ডার এবং কোয়েরি করার সুবিধা দেয়। ছোট আকারের ডেটার জন্য, ডাটাবেস অ্যাডহক কোয়েরি সমর্থন করে, তাই ডেভেলপমেন্টের সময় সাধারণত ইনডেক্সের প্রয়োজন হয় না। তবে আপনার অ্যাপ চালু করার আগে, আপনার অ্যাপটি বৃদ্ধির সাথে সাথে কাজ করা নিশ্চিত করার জন্য আপনার যে কোনও কোয়েরির জন্য ইনডেক্স নির্দিষ্ট করা গুরুত্বপূর্ণ।
.indexOn নিয়ম ব্যবহার করে সূচীগুলি নির্দিষ্ট করা হয়। এখানে একটি উদাহরণ সূচক ঘোষণা দেওয়া হল যা ডাইনোসরের তালিকার জন্য উচ্চতা এবং দৈর্ঘ্য ক্ষেত্রগুলিকে সূচী করবে:
{
"rules": {
"dinosaurs": {
".indexOn": ["height", "length"]
}
}
}