Evita las reglas inseguras

Usa esta guía para comprender las vulnerabilidades comunes de la configuración de reglas de seguridad de Firebase, revisar y mejorar la seguridad de tus reglas, y probar los cambios que realices antes de implementarlos.

Si recibes una alerta que indica que tus datos no están protegidos adecuadamente, revisa estos errores comunes y actualiza las reglas vulnerables.

Accede a tus reglas de seguridad de Firebase

Para ver tus reglas existentes, usa Firebase CLI o Firebase console. Asegúrate de editar tus reglas con el mismo método, de manera consistente, para evitar reemplazar las actualizaciones por error. Si no estás seguro de si tus reglas definidas de forma local reflejan las actualizaciones más recientes, Firebase console siempre muestra la versión implementada más recientemente de tus reglas de seguridad de Firebase.

Para acceder a tus reglas desde Firebase console, selecciona tu proyecto y navega hacia Database o Storage. Haz clic en Reglas una vez que estés en la base de datos o en el depósito de almacenamiento correctos.

Para acceder a tus reglas desde Firebase CLI, dirígete al archivo de reglas anotado en tu archivo firebase.json.

Comprende las reglas de seguridad de Firebase

Las reglas de seguridad de Firebase permiten proteger tus datos contra usuarios maliciosos. Cuando creas una instancia de base de datos o almacenamiento en Firebase console, puedes elegir si tus reglas de seguridad de Firebase restringirán el acceso a tus datos a todos los usuarios (Modo bloqueado) o les otorgarán acceso (Modo de prueba). Si bien es posible que desees una configuración más abierta durante el desarrollo, asegúrate de tomarte el tiempo para configurar correctamente tus reglas y proteger tus datos antes de implementar tu app.

Usa uno de los emuladores locales de Firebase para ejecutar tu app en un entorno de desarrollo local a medida que la desarrollas y pruebas diferentes configuraciones en tus reglas.

Situaciones comunes con reglas inseguras

Antes de implementar tu app, debes revisar y actualizar las reglas que definiste en la configuración predeterminada o cuando empezaste a trabajar en su desarrollo. Asegúrate de proteger los datos de usuarios correctamente. Para ello, evita los siguientes riesgos comunes.

Acceso abierto

Durante la configuración de tu proyecto de Firebase, es posible que hayas establecido reglas para permitir el acceso abierto durante el desarrollo. Tal vez creas que eres el único usuario de tu app, pero, si la implementaste, ya está disponible en Internet. Si no autenticas a los usuarios ni configuras las reglas de seguridad, cualquier persona que adivine el ID del proyecto podrá robar, modificar o borrar los datos.

No se recomienda: Otorgar acceso de lectura y escritura para todos los usuarios.

Cloud Firestore


// Allow read/write access to all users under any conditions
// Warning: **NEVER** use this ruleset in production; it allows
// anyone to overwrite your entire database.

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true;
    }
  }
}

Realtime Database


{
  // Allow read/write access to all users under any conditions
  // Warning: **NEVER** use this ruleset in production; it allows
  // anyone to overwrite your entire database.

  "rules": {
    ".read": true
    ".write": true
  }
}
    

Cloud Storage


// Anyone can read or write to the bucket, even non-users of your app.
// Because it is shared with Google App Engine, this will also make
// files uploaded via GAE public.
// Warning: This rule makes every file in your storage bucket accessible to any
// user. Apply caution before using it in production, since it means anyone can
// overwrite all your files.

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write;
    }
  }
}
    
Solución: Configurar reglas que restrinjan el acceso de lectura y escritura

Define reglas que tengan sentido en tu jerarquía de datos. Una de las soluciones comunes a este problema es la seguridad basada en usuarios con Firebase Authentication. Obtén más información sobre cómo autenticar usuarios mediante reglas.

Cloud Firestore

Realtime Database

Cloud Storage

Acceso para cualquier usuario autenticado

En ocasiones, las reglas verifican que el usuario acceda a su cuenta, pero no restringen el acceso según esa autenticación. Si una de tus reglas incluye auth != null, confirma que quieres que cualquier usuario autenticado tenga acceso a los datos.

Qué debes evitar: Permitir que cualquier usuario autenticado tenga acceso de lectura y escritura a toda tu base de datos

Cloud Firestore


service cloud.firestore {
  match /databases/{database}/documents {
    match /some_collection/{document} {
      allow read, write: if request.auth.uid != null;
    }
  }
}

Realtime Database


{
  "rules": {
    ".read": "auth.uid != null"
    ".write": "auth.uid != null"
  }
}

Cloud Storage


// Only authenticated users can read or write to the bucket
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if request.auth != null;
    }
  }
}
Solución: Limitar el acceso mediante condiciones de seguridad

Cuando verifiques la autenticación, te recomendamos usar una de las propiedades de autenticación para restringir aún más el acceso de algunos usuarios a conjuntos de datos específicos. Obtén más información sobre las diferentes propiedades de autenticación.

Cloud Firestore

Realtime Database

Cloud Storage

Acceso cerrado

Otro enfoque común que puedes aplicar mientras desarrollas la app es mantener tus datos bloqueados. Por lo general, esto significa que bloqueaste el acceso de lectura y escritura para todos los usuarios de la siguiente manera:

Cloud Firestore

// Deny read/write access to all users under any conditions
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if false;
    }
  }
}

Realtime Database

{
  "rules": {
    ".read": false,
    ".write": false
  }
}
    

Cloud Storage

// Access to files through Firebase Storage is completely disallowed.
// Files may still be accessible through Google App Engine or GCS APIs.

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

Los SDK de Firebase Admin y Cloud Functions aún podrán acceder a tu base de datos. Usa estas reglas cuando quieras utilizar Cloud Firestore o Realtime Database como un backend solo de servidor junto con el SDK de Firebase Admin. Aunque esta alternativa es segura, recomendamos que pruebes que los clientes de tu app puedan recuperar datos sin problemas.

Consulta Cómo comenzar con las reglas de seguridad de Cloud Firestore para obtener más información sobre estas reglas y su funcionamiento.

Prueba tus reglas de seguridad de Cloud Firestore

Usa el emulador de Firebase para verificar el comportamiento de tu app y la configuración de las reglas de seguridad de Cloud Firestore. Úsalo para ejecutar y automatizar las pruebas de unidades en un entorno local antes de implementar las modificaciones.

Para validar rápidamente las reglas de seguridad de Firebase en Firebase console, usa el simulador de reglas de Firebase.