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