Firebase Storage никогда не бывает полностью приватным? - PullRequest
1 голос
/ 17 января 2020

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

rules_version = '2';

service firebase.storage {
  match /b/{bucket}/o {
    match /something/{allPaths=**} {
      allow read, write: if request.auth.uid != null;
    }
  }
}

Однако, когда я просматриваю информацию об активах, сохраненных в хранилище на консоли Firebase, я найдите для каждого из них ссылку, чтобы открыть их публично (когда я открываю детали файла), например:

https://firebasestorage.googleapis.com/v0/b/${my-project}.appspot.com/o/${my-file}?alt=media&token=49385ae5-4df6-44ef-a313-8d1f07b59111

Я предполагаю, что эта ссылка является downloadURL и c доступ предоставляется через token.

Поэтому я понимаю, что содержимое хранилища на самом деле не является полностью приватным, потому что даже если я устанавливаю строгие правила и даже если я лично и мои приложения не генерируют загрузку URL, Firebase по-прежнему автоматически генерирует такой URL для каждого файла, и поэтому, даже если токен трудно найти, контент в любом случае доступен в открытом доступе онлайн.

Правильно ли мое понимание?

Или ссылка, которую я нашел в консоли Firebase, - это не URL-адрес загрузки, а временная ссылка, соответственно, токен, предоставленный консолью как срок действия. ion life?

Или можно настроить ведро хранения Firebase так, чтобы оно никогда не генерировало ссылки для скачивания?

1 Ответ

2 голосов
/ 17 января 2020

Любой, кто имеет загруженный URL-адрес с действительным токеном, может получить доступ к содержимому из любого места. Тем не менее, если вы никогда не будете раскрывать этот URL-адрес никому, по сути невозможно угадать этот URL-адрес, даже если он знает путь. Токен является случайным и содержит огромное количество энтропии.

Если вы беспокоитесь о том, чтобы кто-то угадал этот URL с правильным токеном, вас также должны беспокоить два случайных атома во вселенной, сталкивающихся друг с другом. (Это небольшое преувеличение, но вы можете сделать математику, если предположите, что каждый символ токена является действительным гексом ди git.)

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

...