es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Reglas de Firestore cuando una base de datos se comparte entre múltiples instancias.

Imagina que hay una base de datos de Firestore que es utilizada tanto por 1: un cliente de front-end estático como por 2: un servidor de node.js.

Básicamente, solo se permite que un dominio y una dirección IP utilicen esa base de datos, lo cual funciona bastante bien.

La parte complicada es:

  • queremos que el servidor de node.js pueda leer/escribir en toda la base de datos
  • pero al cliente web solo se le debe permitir leer/escribir en la misma base de datos si un usuario está autenticado.

El problema es que con reglas no es posible agregar nuestra dirección IP a una lista blanca.

Entonces intentamos usar esto:

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

Luego, el servidor de node.js puede usar signInAnonymously, mientras que el cliente de front-end necesita autenticar a un usuario antes de acceder a cualquier contenido.

Mi pregunta es:

¿Es signInAnonymously lo suficientemente seguro?
Dado que la autenticación anónima está habilitada, ¿sería posible que alguien haga signInAnonymously desde nuestro front-end?
¿Sería posible que alguien falsifique alguna cabecera y finja ser nuestro dominio solo para autenticarse como anónimo?

¿Cuál sería la mejor práctica en un caso como este?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Mientras que signInAnonymously proporciona cierto nivel de seguridad, no es infalible.

    Si alguien obtiene acceso a tu apiKey (que está disponible en el código de tu frontend), podrían potencialmente hacer signInAnonymously desde cualquier lugar.

    Además, alguien podría potencialmente falsificar tu dominio y/o dirección IP para obtener acceso a la base de datos.

    La mejor práctica en este caso sería implementar Firebase Authentication en tu cliente de frontend y restringir el acceso basado en roles y permisos de usuario. De esta manera, solo los usuarios autenticados con los permisos adecuados pueden leer y escribir en la base de datos.

    También podrías considerar implementar una solución en el lado del servidor para autenticar tu uso desde node.js, como OAuth 2.0.

Comments are closed.