قوانین پایگاه داده بیدرنگ Firebase را درک کنید

قوانین امنیتی پایگاه داده بیدرنگ Firebase تعیین می کند که چه کسی به پایگاه داده شما دسترسی خواندن و نوشتن دارد، ساختار داده های شما چگونه است و چه شاخص هایی وجود دارد. این قوانین در سرورهای Firebase زنده هستند و همیشه به طور خودکار اجرا می شوند. هر درخواست خواندن و نوشتن تنها در صورتی تکمیل می شود که قوانین شما اجازه دهد. به طور پیش فرض، قوانین شما به کسی اجازه دسترسی به پایگاه داده شما را نمی دهد. این برای محافظت از پایگاه داده شما در برابر سوء استفاده است تا زمانی که زمانی برای سفارشی کردن قوانین خود یا تنظیم احراز هویت داشته باشید.

قوانین امنیت پایگاه داده بیدرنگ دارای نحوی شبیه به جاوا اسکریپت هستند و در چهار نوع وجود دارند:

انواع قوانین
.خواندن توضیح می دهد که آیا و چه زمانی داده ها مجاز به خواندن توسط کاربران هستند.
.نوشتن توضیح می دهد که آیا و چه زمانی داده ها مجاز به نوشتن هستند.
.تایید اعتبار تعیین می‌کند که یک مقدار به‌درستی قالب‌بندی شده چگونه باشد، آیا دارای ویژگی‌های فرزند و نوع داده باشد.
.indexOn فرزندی را برای فهرست بندی برای پشتیبانی از سفارش و پرس و جو مشخص می کند.

مروری بر امنیت پایگاه داده بیدرنگ

پایگاه داده بیدرنگ Firebase مجموعه کاملی از ابزارها را برای مدیریت امنیت برنامه شما فراهم می کند. این ابزارها احراز هویت کاربران، اجرای مجوزهای کاربر و اعتبارسنجی ورودی ها را آسان می کند.

برنامه‌های مبتنی بر Firebase کدهای سمت کلاینت بیشتری نسبت به برنامه‌های دارای پشته‌های فناوری دیگر اجرا می‌کنند. بنابراین، رویکرد ما به امنیت ممکن است کمی متفاوت از آنچه شما به آن عادت کرده اید باشد.

احراز هویت

اولین قدم متداول برای ایمن سازی اپلیکیشن شما، شناسایی کاربران است. این فرآیند احراز هویت نامیده می شود. می‌توانید از Firebase Authentication استفاده کنید تا کاربران بتوانند به برنامه شما وارد شوند. احراز هویت 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 به دست می‌آید.

{
  "rules": {
    "users": {
      "$uid": {
        ".write": "$uid === auth.uid"
      }
    }
  }
}

اعتبار سنجی داده ها

پایگاه داده بیدرنگ Firebase بدون طرح است. این باعث می‌شود که در حین توسعه، تغییر چیزها آسان شود، اما زمانی که برنامه شما آماده توزیع شد، مهم است که داده‌ها ثابت بمانند. زبان قوانین شامل یک قانون .validate است که به شما امکان می دهد منطق اعتبار سنجی را با استفاده از همان عبارات مورد استفاده برای قوانین .read و .write . اعمال کنید. تنها تفاوت این است که قوانین اعتبارسنجی آبشاری نمی‌شوند ، بنابراین همه قوانین اعتبارسنجی مربوطه باید به درستی ارزیابی شوند تا نوشتن مجاز باشد.

این قانون اعمال می کند که داده های نوشته شده در /foo/ باید رشته ای کمتر از 100 کاراکتر باشد:

{
  "rules": {
    "foo": {
      ".validate": "newData.isString() && newData.val().length < 100"
    }
  }
}

قوانین اعتبارسنجی به همه توابع و .write داخلی مشابه قوانین .read و نوشتن. دسترسی دارند. می‌توانید از این قوانین برای ایجاد قوانین اعتبارسنجی استفاده کنید که از داده‌های سایر نقاط پایگاه داده، هویت کاربر، زمان سرور و موارد دیگر آگاه هستند.

تعریف شاخص های پایگاه داده

پایگاه داده بیدرنگ Firebase امکان سفارش و جستجوی داده ها را می دهد. برای اندازه های کوچک داده، پایگاه داده از پرس و جوی موقت پشتیبانی می کند، بنابراین معمولاً در طول توسعه به نمایه ها نیازی نیست. با این حال، قبل از راه‌اندازی برنامه، مهم است که برای هر درخواستی که دارید فهرست‌هایی را مشخص کنید تا مطمئن شوید که با رشد برنامه شما به کار خود ادامه می‌دهند.

ایندکس ها با استفاده از قانون .indexOn مشخص می شوند. در اینجا مثالی از اعلان شاخص است که فیلدهای ارتفاع و طول را برای لیستی از دایناسورها فهرست می کند:

{
  "rules": {
    "dinosaurs": {
      ".indexOn": ["height", "length"]
    }
  }
}

مراحل بعدی