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

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

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

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

مروری بر امنیت Realtime Database

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

برنامه‌های مبتنی بر 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 Realtime Database بدون طرح است. این باعث می‌شود که در حین توسعه، تغییر چیزها آسان شود، اما زمانی که برنامه شما آماده توزیع شد، مهم است که داده‌ها ثابت بمانند. زبان قوانین شامل یک قانون .validate است که به شما امکان می دهد منطق اعتبار سنجی را با استفاده از همان عبارات مورد استفاده برای قوانین .read و .write اعمال کنید. تنها تفاوت این است که قوانین اعتبار سنجی آبشاری نمی شوند ، بنابراین تمام قوانین اعتبار سنجی مربوطه باید درست ارزیابی شوند تا نوشتن مجاز باشد.

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

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

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

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

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

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

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

مراحل بعدی