firebase firebase-realtime-database firebase-authentication firebase-security-rules

Correo electrónico de Firebase que dice que mi base de datos en tiempo real tiene reglas inseguras



firebase-realtime-database firebase-authentication (1)

bombero aquí

Lo siento si el correo electrónico no fue muy explícito sobre lo que no es seguro sobre esas reglas. Asegurar los datos de su usuario es un paso crucial para cualquier aplicación que ponga a disposición, por lo que intentaré explicar un poco más sobre cómo funciona a continuación.

Las reglas (predeterminadas) que tiene permiten que cualquier persona que haya iniciado sesión en su acceso completo de lectura / escritura de fondo a toda la base de datos. Esta es solo una capa muy básica de seguridad.

Por un lado, esto es más seguro que simplemente otorgar a todos el acceso a su base de datos, al menos tienen que iniciar sesión.

Por otro lado, si habilita cualquier proveedor de autenticación en Firebase Authentication, cualquiera puede iniciar sesión en su back-end, incluso sin usar su aplicación. Dependiendo del proveedor, esto puede ser tan fácil como ejecutar un poco de JavaScript en la consola de desarrollador de su navegador. Y una vez que inician sesión, pueden leer y escribir cualquier cosa en su base de datos. Esto significa que pueden eliminar todos los datos con un comando simple como firebase.database().ref().delete() .

Para que el acceso a los datos sea más seguro, querrá controlar más estrictamente lo que cada usuario registrado puede hacer. Por ejemplo, supongamos que mantiene un perfil con información sobre cada usuario en /users . Es posible que desee permitir que todos los usuarios accedan a estos perfiles, pero definitivamente desea que los usuarios solo puedan modificar sus propios datos. Puede asegurar esto con estas reglas:

{ "rules": { "users": { ".read": true, "$user_id": { // grants write access to the owner of this user account // whose uid must exactly match the key ($user_id) ".write": "$user_id === auth.uid" } } } }

Con estas reglas, todos (incluso los usuarios no autenticados) pueden leer todos los perfiles. Pero cada perfil solo puede ser modificado por el usuario cuyo perfil es. Para obtener más información al respecto, consulte la documentación de Firebase sobre cómo proteger los datos del usuario .

Además de garantizar que todo el acceso a los datos esté autorizado, también querrá asegurarse de que todos los datos almacenados sean válidos según las reglas que tenga para su aplicación. Por ejemplo, supongamos que desea almacenar dos propiedades para un usuario: su nombre y su edad (solo por el ejemplo, en realidad probablemente almacenaría su fecha de nacimiento). Entonces podrías almacenar esto como algo así como:

"users": { "uidOfPuf": { "name": "Frank van Puffelen", "age": 48 } }

Para asegurarse de que solo se puedan escribir estos datos, puede usar estas reglas:

{ "rules": { "users": { ".read": true, "$user_id": { ".write": "$user_id === auth.uid", ".validate": "data.hasChildren(''name'', ''age'')", "name": { ".validate": "data.isString()", }, "age: { ".validate": "data.isNumber()", }, "$other: { ".validate": false } } } } }

Estas reglas aseguran que cada perfil de usuario tenga una propiedad de name y age con una cadena y un valor numérico respectivamente. Si alguien intenta escribir propiedades adicionales, la escritura se rechaza.

Arriba hay una introducción rápida sobre cómo pensar en proteger sus datos (de usuario). Le recomiendo que consulte la documentación de seguridad de Firebase (y el video incrustado) para obtener más información.

Recientemente recibí un correo electrónico de firebase diciéndome que mi base de datos en tiempo real tiene reglas inseguras. Estas son las reglas que he establecido:

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

¿No es esta una regla segura?

Correo electrónico / contraseña es el único método de inicio de sesión que he habilitado.