Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Lista de verificación de seguridad de Firebase

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

Para mantener seguros sus recursos de Firebase y los datos de sus usuarios, siga estas pautas. No todos los elementos se aplicarán necesariamente a sus requisitos, pero téngalos en cuenta a medida que desarrolla su aplicación.

Evita el tráfico abusivo

Configurar la supervisión y las alertas para los servicios de backend

Para detectar tráfico abusivo, como ataques de denegación de servicio (DOS), configure el monitoreo y las alertas para Cloud Firestore , Realtime Database , Cloud Storage y Hosting .

Si sospecha de un ataque a su aplicación, comuníquese con Soporte lo antes posible para informarles lo que está sucediendo.

Habilitar comprobación de aplicaciones

Para ayudar a garantizar que solo sus aplicaciones puedan acceder a sus servicios de back-end, habilite App Check para cada servicio que lo admita.

Configure sus Cloud Functions para escalar para el tráfico normal

Cloud Functions escala automáticamente para satisfacer las demandas de su aplicación, pero en caso de un ataque, esto puede significar una gran factura. Para evitar esto, puede limitar la cantidad de instancias simultáneas de una función en función del tráfico normal de su aplicación.

Configure alertas para recibir una notificación cuando casi se alcancen los límites

Si su servicio tiene picos de solicitudes, a menudo las cuotas se activarán y acelerarán automáticamente el tráfico a su aplicación. Asegúrese de monitorear su Panel de uso y facturación , pero también puede configurar alertas de presupuesto en su proyecto para recibir notificaciones cuando el uso de recursos supere las expectativas.

Evite las autodosis: pruebe las funciones localmente con los emuladores

Puede ser fácil usar DOS accidentalmente mientras desarrolla Cloud Functions: por ejemplo, al crear un bucle infinito de activación y escritura. Puede evitar que estos errores afecten a los servicios en vivo haciendo su desarrollo con el conjunto de emuladores de Firebase .

(Y si accidentalmente hace DOS usted mismo, anule la implementación de su función eliminándola de index.js y luego ejecute firebase deploy --only functions ).

Donde la capacidad de respuesta en tiempo real es menos importante, la estructura funciona a la defensiva

Si no necesita presentar el resultado de una función en tiempo real, puede mitigar el tráfico abusivo procesando los resultados en lotes: publique los resultados en un tema de Pub/Sub y procese los resultados a intervalos regulares con una función programada .

Comprender las claves API

Las claves de API para los servicios de Firebase no son secretas

Firebase usa claves de API solo para identificar el proyecto de Firebase de su aplicación en los servicios de Firebase, y no para controlar el acceso a la base de datos o a los datos de Cloud Storage, lo cual se hace mediante las reglas de seguridad de Firebase . Por este motivo, no es necesario tratar las claves de API para los servicios de Firebase como secretos y puede insertarlas de forma segura en el código del cliente. Obtén más información sobre las claves de API para Firebase .

Configurar el alcance de la clave API

Como disuasión adicional contra un atacante que intente usar su clave de API para falsificar solicitudes, puede crear claves de API en el ámbito de sus clientes de aplicaciones .

Mantener en secreto las claves del servidor de FCM

A diferencia de las claves de API para los servicios de Firebase, las claves de servidor de FCM (utilizadas por la API HTTP de FCM heredada ) son confidenciales y deben mantenerse en secreto.

Mantener en secreto las claves de la cuenta de servicio

Además, a diferencia de las claves de API para los servicios de Firebase, las claves privadas de la cuenta de servicio (utilizadas por el SDK de administrador ) son confidenciales y deben mantenerse en secreto.

Reglas de seguridad

Inicializar reglas en producción o modo bloqueado

Cuando configura Cloud Firestore, Realtime Database y Cloud Storage, inicialice sus reglas de seguridad para denegar todo acceso de manera predeterminada y agregue reglas que otorgan acceso a recursos específicos a medida que desarrolla su aplicación.

Esta es una de las configuraciones predeterminadas para nuevas instancias de Cloud Firestore (modo de producción) y Realtime Database (modo bloqueado). Elija esta opción cuando configure una nueva instancia de base de datos.

Para Cloud Storage, comience con una configuración de reglas de seguridad como la siguiente:

rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if false;
    }
  }
}

Las reglas de seguridad son un esquema; agregue reglas cuando agregue documentos

No escriba reglas de seguridad después de escribir su aplicación, como una especie de tarea previa al lanzamiento. En su lugar, escribe reglas de seguridad a medida que escribes tu aplicación, tratándolas como un esquema de base de datos: cada vez que necesites usar un nuevo tipo de documento o estructura de ruta, primero escribe su regla de seguridad.

Reglas de seguridad de pruebas unitarias con Emulator Suite; agregarlo a CI

Para asegurarse de que sus reglas de seguridad se mantengan al día con el desarrollo de su aplicación, realice pruebas unitarias de sus reglas con el conjunto de emuladores de Firebase y agregue estas pruebas a su canalización de CI. Consulte estas guías para Cloud Firestore y Realtime Database .

Autenticación

Autenticación personalizada: Mint JWT de un entorno confiable (del lado del servidor)

Si ya tiene un sistema de inicio de sesión seguro, ya sea un sistema personalizado o un servicio de terceros, puede usar su sistema existente para autenticarse con los servicios de Firebase. Cree JWT personalizados desde un entorno confiable, luego pase los tokens a su cliente, que usa el token para autenticarse ( iOS+ , Android , Web , Unity , C++ ).

Para ver un ejemplo del uso de la autenticación personalizada con un proveedor externo, consulte la publicación de blog, Autenticar con Firebase usando Okta .

Autenticación gestionada: los proveedores de OAuth 2.0 son los más seguros

Si usa las funciones de autenticación administrada de Firebase, las opciones de proveedor de OAuth 2.0/OpenID Connect (Google, Facebook, etc.) son las más seguras. Debe admitir uno o más de estos proveedores si puede (dependiendo de su base de usuarios).

Autenticación de contraseña de correo electrónico: establezca una cuota estricta para el punto final de inicio de sesión para evitar ataques de fuerza bruta

Si usa el servicio de autenticación de contraseña de correo electrónico administrado de Firebase, reduzca la cuota predeterminada de los puntos finales de identitytoolkit.googleapis.com para evitar ataques de fuerza bruta. Puede hacerlo desde la página de la API en Google Cloud Console .

Actualice a Cloud Identity Platform para la autenticación multifactor

Para mayor seguridad en el inicio de sesión, puede agregar soporte de autenticación de múltiples factores actualizando a Cloud Identity Platform . Su código de autenticación de Firebase existente seguirá funcionando después de la actualización.

Autenticación anónima

Use solo la autenticación anónima para la incorporación en caliente

Utilice únicamente la autenticación anónima para guardar el estado básico de los usuarios antes de que realmente inicien sesión. La autenticación anónima no reemplaza el inicio de sesión del usuario.

Convierte a los usuarios a otro método de inicio de sesión si quieren los datos cuando pierden su teléfono

Los datos de autenticación anónimos no persistirán si el usuario borra el almacenamiento local o cambia de dispositivo. Si necesita conservar los datos más allá de los reinicios de la aplicación en un solo dispositivo, convierta al usuario en una cuenta permanente .

Use reglas de seguridad que requieran que los usuarios se hayan convertido a un proveedor de inicio de sesión o que hayan verificado su correo electrónico

Cualquiera puede crear una cuenta anónima en su proyecto. Con eso en mente, proteja todos los datos no públicos con reglas de seguridad que requieran métodos de inicio de sesión específicos o direcciones de correo electrónico verificadas .

Por ejemplo:

allow write: if request.auth.token.firebase.sign_in_provider != "anonymous";
allow write: if request.auth.token.email_verified = true;

Gestión del medio ambiente

Configurar proyectos de desarrollo y puesta en escena

Configure proyectos de Firebase separados para desarrollo, preparación y producción. No combine el código del cliente con el de producción hasta que se haya probado con el proyecto de ensayo.

Limite el acceso del equipo a los datos de producción

Si trabaja con un equipo más grande, puede mitigar las consecuencias de los errores y las infracciones al limitar el acceso a los datos de producción mediante roles predefinidos o roles de IAM personalizados.

Si su equipo usa el paquete de emuladores para el desarrollo, es posible que no necesite otorgar un acceso más amplio al proyecto de producción.

gestión de la biblioteca

Tenga cuidado con las faltas de ortografía de la biblioteca o los nuevos mantenedores

Al agregar bibliotecas a su proyecto, preste mucha atención al nombre de la biblioteca y sus mantenedores. Una biblioteca con un nombre similar a la que desea instalar podría contener código malicioso.

No actualice las bibliotecas sin comprender los cambios

Revise los registros de cambios de cualquier biblioteca que use antes de actualizar. Asegúrese de que la actualización agregue valor y verifique que el mantenedor siga siendo una parte en la que confía.

Instale bibliotecas de vigilancia como dependencias de desarrollo o prueba

Use una biblioteca como Snyk para escanear su proyecto en busca de dependencias inseguras.

Configurar el monitoreo de Funciones; compruébalo después de las actualizaciones de la biblioteca

Si usa el SDK del registrador de Cloud Functions , puede monitorear y recibir alertas sobre comportamientos inusuales, incluido el comportamiento causado por las actualizaciones de la biblioteca.

Seguridad de la función en la nube

Nunca coloque información confidencial en las variables de entorno de una función de nube.

A menudo, en una aplicación Node.js autohospedada, utiliza variables de entorno para contener información confidencial, como claves privadas. No hagas esto en Cloud Functions . Debido a que Cloud Functions reutiliza entornos entre invocaciones de funciones, la información confidencial no debe almacenarse en el entorno.

  • Para almacenar las claves de la API de Firebase, que no son secretas , simplemente insértelas en el código.
  • Si usa el SDK de administración de Firebase en una función de la nube, no es necesario que proporcione explícitamente las credenciales de la cuenta de servicio, ya que el SDK puede adquirirlas automáticamente durante la inicialización.
  • Si está llamando a las API de Google y Google Cloud que requieren credenciales de cuenta de servicio, la biblioteca de Google Auth para Node.js puede obtener estas credenciales de las credenciales predeterminadas de la aplicación , que se completan automáticamente en Cloud Functions.
  • Para que las claves privadas y las credenciales de los servicios que no son de Google estén disponibles para sus Cloud Functions, use Cloud Secret Manager .

Cifrar información confidencial

Si no puede evitar pasar información confidencial a su Cloud Function, debe idear su propia solución personalizada para cifrar la información.

Las funciones simples son más seguras; si necesita complejidad, considere Cloud Run

Trate de mantener sus funciones en la nube lo más simples y comprensibles posible. La complejidad de sus funciones a menudo puede generar errores difíciles de detectar o comportamientos inesperados.

Si necesita configuraciones complejas de lógica o entorno, considere usar Cloud Run en lugar de Cloud Functions.