¿Cómo restringir la modificación de datos de Firebase?

92

Firebase proporciona un back-end de base de datos para que los desarrolladores puedan centrarse en el código del lado del cliente.

Entonces, si alguien toma mi uri de base de fuego (por ejemplo https://firebaseinstance.firebaseio.com), desarrolle localmente .

Entonces, ¿podrían crear otra aplicación a partir de mi instancia de Firebase, registrarse y autenticarse para leer todos los datos de mi aplicación de Firebase?

rattanak
fuente

Respuestas:

104

@Frank van Puffelen,

Mencionaste el ataque de phishing. De hecho, hay una forma de asegurarlo.

Si inicia sesión en la consola de GoogleAPIs API Manager, tiene la opción de bloquear de qué referencia HTTP aceptará la solicitud su aplicación.

  1. visite https://console.developers.google.com/apis
  2. Ve a tu proyecto de base de fuego
  3. Ir a credenciales
  4. En Claves de API, seleccione la clave del navegador asociada con su proyecto de base de fuego (debe tener la misma clave que la clave de API que usa para inicializar su aplicación de base de fuego).
  5. En "Aceptar solicitudes de estas referencias HTTP (sitios web), simplemente agregue la URL de su aplicación.

Esto solo debería permitir que el dominio incluido en la lista blanca use su aplicación.

Esto también se describe aquí en la lista de verificación de lanzamiento de firebase aquí: https://firebase.google.com/support/guides/launch-checklist

¿Quizás la documentación de la base de fuego podría hacer esto más visible o bloquear automáticamente el dominio de forma predeterminada y requerir que los usuarios permitan el acceso?

prufrofro
fuente
2
cuando voy a la consola de la API de Google, no veo la opción para bloquear la referencia HTTP. La captura de pantalla será útil. thx
rattanak
¿Ha intentado seguir los pasos anteriores? Debería llevarte allí mismo. Por razones de seguridad, no voy a hacer una captura de pantalla. Recuerde buscar la clave del navegador. la mejor de las suertes.
prufrofro
4
¿Qué pasa cuando se usa firebase con una aplicación móvil híbrida, usando un marco como iónico, cómo puede funcionar la lista blanca? ¿Alguna sugerencia?
Dinana
1
@prufrofro ¿Te está funcionando bien? Estaba pensando en hacer lo mismo con una aplicación de Android. Me pregunto por qué Firebase no cubre eso en la sección de seguridad.
steliosf
2
@ Anand Sí, pero Firebase no cubre esto en la documentación. De forma predeterminada, las claves son públicas y debe restringirlas manualmente para su uso solo en un nombre de paquete específico y un certificado de aplicación SHA-1. Y me preguntaba por qué Firebase no menciona esto en absoluto. ¿Hay alguna trampa o algo así?
steliosf
38

El hecho de que alguien conozca su URL no es un riesgo para la seguridad.

Por ejemplo: No tengo ningún problema en decirle que mi banco aloja su sitio web en bankofamerica.com y habla el protocolo HTTP allí. A menos que también conozca las credenciales que utilizo para acceder a ese sitio, conocer la URL no le sirve de nada.

Para proteger sus datos, su base de datos debe estar protegida con:

  • reglas de validación que garantizan que todos los datos se adhieran a la estructura que desee
  • reglas de autorización para garantizar que cada bit de datos solo pueda ser leído y modificado por los usuarios autorizados

Todo esto está cubierto en la documentación de Firebase sobre seguridad y reglas , que recomiendo encarecidamente.

Con estas reglas de seguridad implementadas, la única forma en que la aplicación de otra persona puede acceder a los datos en su base de datos es si copia la funcionalidad de su aplicación, haga que los usuarios inicien sesión en su aplicación en lugar de la suya e inicien sesión / lean desde / escriban en su base de datos; esencialmente un ataque de phishing. En ese caso, no hay ningún problema de seguridad en la base de datos, aunque probablemente sea hora de involucrar a algunas autoridades.

Frank van Puffelen
fuente
4
no es exactamente la respuesta que estoy buscando. Déjame preguntarte de otra manera. Suponga que le di esta URL a mi base de fuego https://tinderclone.firebaseio.com/y https://tinderclone.firebaseio.com/profiles.json. Son una base de datos de base de fuego real. ¿Puede desarrollar una aplicación a partir de ella, haciendo un formulario de registro y un formulario de inicio de sesión con correo electrónico? Dado que mi aplicación permite que cualquier persona se registre con el correo electrónico, una vez que se haya registrado, ¿podrá leer todos los datos? Te haré otra pregunta más tarde. Gracias
rattanak
4
Eso depende de cómo proteja su base de datos. Simplemente agregar ".read": falseevitará que alguien vea los datos. Probablemente desee permitir un poco más que eso, pero todo depende de su caso de uso. La protección de los datos se trata en la documentación de Firebase sobre Seguridad y reglas .
Frank van Puffelen
6

Con respecto a la lista blanca de autenticación para aplicaciones móviles, donde el nombre de dominio no es aplicable, Firebase ha

1) SHA1 fingerprintpara aplicaciones de Android y

2) App Store ID and Bundle ID and Team ID (if necessary)para sus aplicaciones iOS

que tendrás que configurar en Firebase console.

Con esta protección, ya que la validación no es solo si alguien tiene una clave API válida, dominio de autenticación, etc., sino que también proviene de nuestras aplicaciones autorizadas y domain name/HTTP referrer in casede la Web .

Dicho esto, no tenemos que preocuparnos si estas claves API y otros parámetros de conexión están expuestos a otros.

Para obtener más información, https://firebase.google.com/support/guides/launch-checklist

Anand
fuente
Disculpe mi ignorancia, no soy muy bueno con el cifrado, pero ¿no se puede acceder a Sha1 a través de su apk? ¿La gente no puede simplemente copiar el Sha1 también? No veo cómo esto ayuda. Estaría muy feliz de que se demuestre lo contrario :)
cs guy
Si. Ciertamente puedes obtener sha1 de una apk. Pero eso no es algo que pase como parámetro a firebase para validar su llamada. Firebase lo toma en su nivel api-sdk (créalo en el tiempo de ejecución de Android). Por lo tanto, no podrá enviar esto a firebase como parámetro para falsificar la conexión.
Anand
Usar solo la huella digital SHA1 no ayudará en nada a proteger la comunicación de la aplicación de Android con Firebase. El SHA1 en sí se puede obtener y copiar fácilmente, y la conexión aún se puede falsificar usando la API de Firebase en lugar del SDK. Primero debe dar fe de su aplicación y usar alguna ofuscación de código para ocultar la clave.
FEBRYAN ASA PERDANA