Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Evite las reglas inseguras

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

Utilice esta guía para comprender las vulnerabilidades comunes en las configuraciones de las reglas de seguridad de Firebase, revisar y proteger mejor sus propias reglas y probar sus cambios antes de implementarlos.

Si recibe una alerta de que sus datos no están debidamente protegidos, revise estos errores comunes y actualice las reglas vulnerables.

Accede a tus reglas de seguridad de Firebase

Para ver sus Reglas existentes, use Firebase CLI o Firebase console. Asegúrese de editar sus reglas usando el mismo método, de manera consistente, para evitar sobrescribir actualizaciones por error. Si no está seguro de si sus reglas definidas localmente reflejan las actualizaciones más recientes, la consola de Firebase siempre muestra la versión implementada más recientemente de sus Reglas de seguridad de Firebase.

Para acceder a sus reglas desde Firebase console , seleccione su proyecto, luego navegue a Realtime Database , Cloud Firestore o Storage . Haga clic en Reglas una vez que esté en la base de datos o depósito de almacenamiento correcto.

Para acceder a sus reglas desde Firebase CLI, vaya al archivo de reglas anotado en su archivo firebase.json .

Comprender las reglas de seguridad de Firebase

Las reglas de seguridad de Firebase protegen sus datos de usuarios malintencionados. Cuando crea una instancia de base de datos o un depósito de Cloud Storage en la consola de Firebase, puede elegir denegar el acceso a todos los usuarios ( modo bloqueado ) u otorgar acceso a todos los usuarios ( modo de prueba ). Si bien es posible que desee una configuración más abierta durante el desarrollo, asegúrese de tomarse el tiempo para configurar correctamente sus reglas y proteger sus datos antes de implementar su aplicación.

Mientras desarrolla su aplicación y prueba diferentes configuraciones para sus reglas, use uno de los emuladores locales de Firebase para ejecutar su aplicación en un entorno de desarrollo local.

Escenarios comunes con reglas inseguras

Las Reglas que puede haber configurado de forma predeterminada o como trabajó inicialmente en el desarrollo de su aplicación deben revisarse y actualizarse antes de implementar su aplicación. Asegúrese de proteger correctamente los datos de sus usuarios evitando los siguientes errores comunes.

Acceso abierto

Al configurar su proyecto de Firebase, es posible que haya establecido sus reglas para permitir el acceso abierto durante el desarrollo. Puede pensar que es la única persona que usa su aplicación, pero si la implementó, está disponible en Internet. Si no está autenticando a los usuarios ni configurando las reglas de seguridad, cualquiera que adivine su ID de proyecto puede robar, modificar o eliminar los datos.

No recomendado: acceso de lectura y escritura para todos los usuarios.

Tienda de fuego en la nube

// 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;
    }
  }
}

Base de datos en tiempo real

{
  // 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
  }
}
    

Almacenamiento en la nube

// Anyone can read or write to the bucket, even non-users of your app.
// Because it is shared with App Engine, this will also make
// files uploaded via App Engine public.
// Warning: This rule makes every file in your Cloud 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: Reglas que restringen el acceso de lectura y escritura.

Cree reglas que tengan sentido para su jerarquía de datos. Una de las soluciones comunes a esta inseguridad es la seguridad basada en el usuario con Firebase Authentication. Obtenga más información sobre la autenticación de usuarios con reglas .

Tienda de fuego en la nube

Base de datos en tiempo real

Almacenamiento en la nube

Acceso para cualquier usuario autenticado

A veces, las reglas verifican que un usuario haya iniciado sesión, pero no restringen más el acceso en función de esa autenticación. Si una de sus reglas incluye auth != null , confirme que desea que cualquier usuario que haya iniciado sesión tenga acceso a los datos.

No recomendado: cualquier usuario que haya iniciado sesión tiene acceso de lectura y escritura a toda su base de datos.

Tienda de fuego en la nube

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

Base de datos en tiempo real

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

Almacenamiento en la nube

// 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: Estrechar el acceso utilizando condiciones de seguridad.

Cuando esté verificando la autenticación, también puede usar una de las propiedades de autenticación para restringir aún más el acceso a usuarios específicos para conjuntos de datos específicos. Obtenga más información sobre las diferentes propiedades de autenticación .

Tienda de fuego en la nube

Base de datos en tiempo real

Almacenamiento en la nube

(Base de datos en tiempo real) Reglas heredadas incorrectamente

Cascada de reglas de base de datos en tiempo real, con reglas en rutas principales más superficiales que anulan reglas en nodos secundarios más profundos. Cuando escriba una regla en un nodo secundario, recuerde que solo puede otorgar privilegios adicionales. No puede refinar o revocar el acceso a los datos en una ruta más profunda en su base de datos.

No recomendado: Refinar reglas en rutas secundarias
{
  "rules": {
     "foo": {
        // allows read to /foo/*
        ".read": "data.child('baz').val() === true",
        "bar": {
          /* ignored, since read was allowed already */
          ".read": false
        }
     }
  }
}
Solución: escriba reglas amplias en las rutas principales y otorgue privilegios más específicos en las rutas secundarias. Si sus necesidades de acceso a los datos requieren más granularidad, mantenga sus reglas granulares. Obtenga más información sobre las reglas de la base de datos en tiempo real en cascada en Asegure sus datos .

Acceso cerrado

Mientras desarrolla su aplicación, otro enfoque común es mantener sus datos bloqueados. Por lo general, esto significa que ha cerrado el acceso de lectura y escritura a todos los usuarios, de la siguiente manera:

Tienda de fuego en la nube

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

Base de datos en tiempo real

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

Almacenamiento en la nube

// Access to files through Cloud Storage is completely disallowed.
// Files may still be accessible through App Engine or Google Cloud Storage 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 pueden acceder a su base de datos. Use estas reglas cuando tenga la intención de usar Cloud Firestore o Realtime Database como backend solo de servidor junto con Firebase Admin SDK. Si bien es seguro, debe probar que los clientes de su aplicación pueden recuperar datos correctamente.

Obtenga más información sobre las reglas de seguridad de Cloud Firestore y cómo funcionan en Introducción a las reglas de seguridad de Cloud Firestore .

Pruebe sus reglas de seguridad de Cloud Firestore

Para comprobar el comportamiento de su aplicación y verificar las configuraciones de las reglas de seguridad de Cloud Firestore, utilice el emulador de Firebase . Use el emulador de Cloud Firestore para ejecutar y automatizar pruebas unitarias en un entorno local antes de implementar cualquier cambio.

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