Як обмежити модифікацію даних Firebase?


92

Firebase забезпечує внутрішню базу даних, щоб розробники могли зосередитися на коді на стороні клієнта.

Отже, якщо хтось бере мою firebase uri (наприклад, https://firebaseinstance.firebaseio.com), тоді розробляйте на ній локально .

Тоді, чи зможуть вони створити іншу програму з мого екземпляра Firebase, зареєструватися та автентифікувати себе, щоб прочитати всі дані моєї програми Firebase?

Відповіді:


104

@Франк ван Пуффелен,

Ви згадали фішинг-атаку. Насправді є спосіб забезпечити це.

Якщо ви ввійдете в консоль googleAPIs API Manager, у вас буде можливість заблокувати, який реферал HTTP ваш додаток прийме запит.

  1. відвідайте https://console.developers.google.com/apis
  2. Перейдіть до проекту Firebase
  3. Перейдіть до облікових даних
  4. У розділі API-ключі виберіть ключ браузера, пов’язаний із вашим проектом Firebase (повинен мати той самий ключ, що і ключ API, який ви використовуєте для ініціалізації програми Firebase).
  5. У розділі "Прийняти запити від цих рефералів HTTP (веб-сайтів) просто додайте URL-адресу свого додатка.

Це має дозволити лише домену, що входить у білий список, використовувати вашу програму.

Це також описано тут у контрольному списку запуску Firebase тут: https://firebase.google.com/support/guides/launch-checklist

Можливо, документація Firebase може зробити це більш видимим або автоматично заблокувати домен за замовчуванням і вимагати від користувачів дозволу доступу?


2
коли я заходжу на консоль Google API, я не бачу можливості заблокувати посилання HTTP. Знімок екрана буде корисним. thx
rattanak

Ви пробували виконувати наведені вище дії? Це повинно взяти вас прямо там. З міркувань безпеки я не збираюся робити скрипт. Не забудьте шукати ключ браузера. удачі.
prufrofro

4
Що можна сказати про те, як при використанні Firebase з гібридним мобільним додатком, використовуючи такий фреймворк, як ionic, як може працювати білий список? Будь-які пропозиції?
Дінана

1
@prufrofro Це для вас добре працює? Думав зробити те саме для програми для Android. Цікаво, чому Firebase не охоплює цього в розділі безпеки.
steliosf

2
@Anand Так, але Firebase не охоплює цього в документації. За замовчуванням ключі є загальнодоступними, і ви повинні обмежити їх ручним використанням лише для певного імені пакета та сертифіката програми SHA-1. І мені було цікаво, чому Firebase про це взагалі не згадує. Є уловка чи щось інше?
steliosf

38

Той факт, що хтось знає вашу URL-адресу, не є ризиком для безпеки.

Наприклад: у мене немає проблем повідомити, що мій банк розміщує свій веб-сайт на bankofamerica.com, і він там розмовляє протоколом HTTP. Якщо ви також не знаєте облікові дані, якими я користуюся для доступу до цього сайту, знання URL-адреси не приносить вам жодної користі.

Щоб захистити ваші дані, ваша база даних повинна бути захищена:

  • правила перевірки, які гарантують, що всі дані відповідають потрібній вам структурі
  • правила авторизації, що гарантують, що кожен біт даних може бути прочитаний та змінений лише авторизованими користувачами

Це все висвітлено у документації Firebase щодо безпеки та правил , яку я настійно рекомендую.

Завдяки цим правилам безпеки єдиний спосіб, яким чужа програма може отримати доступ до даних у вашій базі даних, - це скопіювати функціональні можливості вашої програми, попросити користувачів увійти в свою програму замість вашої та увійти / прочитати з / написати на ваша база даних; по суті фішинг-атака. У цьому випадку в базі даних немає проблем із безпекою, хоча, мабуть, час залучити деякі органи влади.


4
не зовсім відповідь, яку я шукаю. Дозвольте запитати вас по-іншому. Припустимо, я надіслав вам цю URL-адресу на свій firebase https://tinderclone.firebaseio.com/і https://tinderclone.firebaseio.com/profiles.json. Вони є справжньою базою даних Firebase. Чи можете ви розробити додаток, створивши форму для реєстрації та форму входу за допомогою електронної пошти. Оскільки мій додаток дозволяє кожному зареєструватися електронною поштою, чи зможете ви після реєстрації прочитати всі дані? Пізніше я задам вам ще одне запитання. Дякую
rattanak

4
Це залежить від того, як ви захищаєте свою базу даних. Просто додавання ".read": falseперешкоджатиме будь-кому бачити дані. Можливо, ви хочете дозволити трохи більше, ніж це, але все залежить від вашого випадку використання. Захист даних викладено в документації Firebase щодо безпеки та правил .
Frank van Puffelen

6

Щодо білого списку Auth для мобільних додатків, де доменне ім’я не застосовується, Firebase має

1) SHA1 fingerprintдля програм для Android і

2) App Store ID and Bundle ID and Team ID (if necessary)для ваших програм iOS

який вам доведеться налаштувати у консолі Firebase.

З цим захистом, так як перевірка не тільки , якщо хто - то є дійсний ключ API, домен Auth, і т.д., але і він приходить з наших авторизованих додатків і domain name/HTTP referrer in caseв Інтернеті .

Сказано, що нам не потрібно турбуватися, якщо ці ключі API та інші параметри підключення піддаються іншим.

Для отримання додаткової інформації, https://firebase.google.com/support/guides/launch-checklist


Вибачте за незнання, я не дуже добре працюю з шифруванням, але чи не доступний Sha1 через ваш apk? Чи не можуть люди просто скопіювати і Sha1? Я не розумію, як це допомагає. Я був би дуже радий, щоб мені довели протилежне :)
cs guy

Так. Ви напевно можете отримати sha1 апк. Але це не те, що ви передаєте як параметр firebase для підтвердження вашого дзвінка. Він бере Firebase на рівні api-sdk (вірте, з часу роботи Android). Отже, ви не зможете надіслати це до firebase як параметр для підробки зв’язку.
Ананд

Використання лише відбитка пальця SHA1 нічого не допоможе забезпечити зв'язок вашого додатка Android із Firebase. Сам SHA1 можна легко отримати та скопіювати, а з'єднання все одно можна сфальсифікувати, використовуючи Firebase API замість SDK. Вам слід спочатку атестувати свою програму та скористатися деяким забрудненням коду, щоб приховати ключ.
ЛЮТИЙ АСА ПЕРДАНА
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.