Рубрики
Без рубрики

Firebase Узнайте облачных правил безопасности FireStore

У многих разработчиков я спросил этот один вопрос … безопасен ли Firebase, поскольку код конфигурации … Теги с Firebase, JavaScript, программированием.

Я просил много разработчиков этого вопроса …

Безопасной это Firebase Поскольку код конфигурации подвергается воздействию браузера? 🔥

Мой ответ Да и Нет Отказ

Код конфигурации, который предоставляет Firebase, предназначена для общественности.

Но…

Реальная безопасность лежит в Правила безопасности Отказ 👮 ♂. ️

Наличие правильного правила безопасности на месте, вы можете Создайте безопасное веб-приложение С облаком Firestore, не требуя собственного сервера вообще.

Однако, если у вас есть свой собственный сервер или используете облачные функции, используя Admin FireBase SDK, все правила безопасности будут обойти.

В этом случае вам придется обрабатывать безопасность вручную в вашей среде на стороне серверов.

Давайте посмотрим на шесть общих сценариев, которые вы можете столкнуться при написании правил безопасности FireStore.

Рекомендуется Узнайте хранилище Firebase быстро – руководство

01. Прочитайте разрешение на кого-либо

Допустим, у вас есть коллекция постов, и вы хотите показать все документы из него всем, кто посещает ваш сайт. Вы можете сделать что-то вроде этого:

service cloud.firestore {    
  match /databases/{database}/documents {      
    match /posts/{docId} {        
      allow read;     
    }    
  }  
} 

Довольно прямо вперед!

Разрешить: читать Дает разрешение прочитать все документы в данном пути, в данном случае /posts/{docid} Отказ

Другие операции, такие как создание, обновление и удаление, могут быть разным оператором или объединены с оператором чтения в зависимости от того, какой тип правила вы пытаетесь написать.

Но никогда не используйте Разрешить: напишите без дополнительных правил на месте.

02. Для аутентифицированных пользователей Только

Вместо того, чтобы показывать посты кому-либо, как насчет того, чтобы показать их на Только аутентифицированные пользователи.

service cloud.firestore {   
  match /databases/{database}/documents {     
    match /posts/{docId} {      
      allow read: if request.auth.uid != null     
    }   
  }
}

Вы можете легко сделать это, проверяя, существует ли подписанный пользователь UID или нет. request.auth Объект имеет информацию о подписанном пользователе. Итак, вы можете получить доступ к UID, используя request.auth.uid имущество.

Хороший!

Правило третьего безопасности приведет к тому, что только зарегистрированные пользователи могут прочитать или написать свои собственные документы, а не другие и наоборот.

03. Защищенные в систему пользовательских данных

Если вы с фона SQL, это отношения в одну сторону. Один документ на каждого пользователя в коллекции пользователей.

service cloud.firestore {    
  match /databases/{database}/documents {      
    match /users/{uid} {        
      allow read, write: if request.auth.uid == uid      
    }    
  }  
} 

В пути внутреннего соответствия вы можете увидеть коллекцию пользователей, смягчающуюся переменную подстановки {UID} Это в основном представляет любой документ, который внутри этой коллекции.

Используя это правило безопасности, пользователи могут обновлять свой собственный документ, только если идентификатор пользователя в системе регистрации равен UID Это уже существует в базе данных.

Кроме того, вы можете добавить проверку электронной почты, как второе условие, используя request.auth.token.email_verified флаг.

service cloud.firestore {    
  match /databases/{database}/documents {      
    match /users/{uid}/ {        
      allow read, write: 
        if request.auth.uid == uid &&
           request.auth.token.email_verified == true     
    }    
  }  
} 

04. Никогда не доверяйте клиенту и проверяйте данные

Допустим, у вас есть почтовая коллекция, и каждый документ внутри у него есть заголовок, контент, автор, author_id и т. Д. Author_id будет фактическим идентификатором пользователя.

Я часто обнаруживаю, что его проще понять, показывая структуру данных, прежде чем показывать правило безопасности.

Иногда вы захотите проверить данные входящих запросов перед сохранением базы данных, используя Запрос объект.

Давайте добавим правило безопасности для проверки данных перед разрешением пользователей добавлять новые сообщения в облачный FireStore.

service cloud.firestore {   
  match /databases/{database}/documents {     
    match /posts/{docId} {      
      allow create: 
        if request.resource.data.title is string && 
           request.data.title.size() > 5 &&
           request.data.title.size() < 500 &&
           request.resource.data.author_id == request.auth.uid     
     }   
  } 
}

Это проверка, чтобы посмотреть, является ли заголовок строкой, а также проверяют, если длина заголовка символов длиной составляет от 5 до 500.

Как видите, вы можете добавить валидацию в значительной степени для всех полей, на самом деле, рекомендуется, потому что она дает больше схемы к вашей модели данных.

Наконец, проверьте, если request.resource.data.author_id равен текущей зарегистрированной в системе UID пользователя.

Это очень похоже на проверку Server-Side, не управляя собственным сервером. 🙂

Запрос Firestore для добавления нового поста должен быть что-то вроде этого:

firebase
  .firestore()     
  .collection("posts")     
  .add({         
      title: "JavaScript MVC",
      content: "In this JavaScript MVC...",     
      author: firebase.auth().currentUser.displayName, 
      author_id: firebase.auth().currentUser.uid     
   });

Проверьте мою другую статью Узнать FireStore Crud запросы Быстро Если вы хотите узнать больше о запросах.

05. Получите несколько документов, принадлежащих одному пользователю

Получение нескольких документов одним пользователем часто ссылается на отношения в одну ко многим.

Перед созданием правила убедитесь, что каждый документ имеет файл называется author_id который в основном является администрацией того, кто создал этот пост.

Продолжить чтение…

Оригинал: “https://dev.to/hirajatamil/firebase-learn-cloud-firestore-security-rules-4p95”