Seguridad del servidor Parse
Hola a todos, en este artículo voy a hablar sobre la seguridad cuando se utiliza Parse Server en Back4App. Como la seguridad no es un tema que haga felices a los desarrolladores voy a ser muy conciso y directo. Mi intención aquí era proporcionar una lista de comprobación de seguridad rápida para revisar su aplicación antes de convertirla en una aplicación de producción.
Contents
- 1 Parse Mecanismo de seguridad
- 2 Lista de comprobación de la aplicación de seguridad
- 2.1 1-Mantenga la llave maestra a salvo
- 2.2 2-Desmarcar la creación de clases cliente
- 2.3 3-Crear una estructura de funciones
- 2.4 4-Configurar CLP para usuarios y funciones
- 2.5 5-Hacer que las clases fijas sean de sólo lectura
- 2.6 6-Consejos generales CLP y ACL
- 2.7 7-Determine la duración de su sesión (sólo en algunos casos)
- 2.8 8-Utilizar Https y SSL
- 3 Palabras finales
Parse Mecanismo de seguridad
Con el fin de configurar correctamente el acceso de seguridad adecuado para su aplicación, primero debe entender algunos conceptos básicos de los mecanismos de seguridad de Parse, las clases predeterminadas de Parse y los mecanismos de autenticación.
1-Parse clases por defecto
Parse crea por defecto 3 Clases: Usuarios, Roles y Sesiones. Estas clases están completamente integradas con todo el backend y también te harán la vida más fácil a la hora de configurar los mecanismos de autenticación para proteger tu aplicación.
Usuario
Parse proporciona una clase de usuario especializada llamada Parse.User
que maneja automáticamente gran parte de la funcionalidad necesaria para la gestión de cuentas de usuario.
La clase Parse.
User está protegida por defecto. Los datos almacenados en un Parse.
User sólo pueden ser modificados por ese usuario. Por defecto, los datos pueden ser leídos por cualquier cliente. Así, algunos objetos Parse.
User están autenticados y pueden ser modificados, mientras que otros son de sólo lectura.
Funciones
Role es una clase que permite asociar usuarios y otros roles a un nuevo rol. Una vez creado un rol, puede utilizarlo para definir a qué tendrá acceso ese rol en su aplicación mediante CLP y ACL.
Sesión
Cuando inicie la sesión de un usuario a través de un método de inicio de sesión de usuario
, Parse creará automáticamente un nuevo objeto Session
sin restricciones en su Parse Server. Lo mismo para registros e inicios de sesión en Facebook/Twitter.
Mecanismo de autenticación 2-Parse
Cuando hablamos de acceso a datos en Parse, puedes controlar la seguridad de tu aplicación en dos niveles diferentes:
- Clase/Tabla – Utilice CLPs(Permisos a Nivel de Clase) para restringir la creación de nuevas columnas y el Acceso a Datos en general a toda la clase;
- Objeto- Utilice ACL (Access Control Lists) para controlar el acceso a un objeto específico;
Permisos de nivel de clase – CLPs
Los Permisos a nivel de Clase son un mecanismo que controla el acceso a una Clase y a todos sus objetos. Usando CLPs puedes configurar el acceso de Lectura/Escritura a un Rol, a un Usuario, o a un Puntero.
Mediante este mecanismo puede restringir el acceso a las siguientes operaciones:
- Leer
- Obtener – Obtener información de objetos para un ObjectId dado;
- Buscar – Consulta todos los objetos de esta Clase (ObjectID no es necesario);
- Count – Número total de objetos de la clase;
- Escribir
- Crear – Crear nuevos Objetos;
- Actualizar – Actualiza un objeto existente;
- Borrar – Borrar un objeto existente;
- Añadir
- Añadir Campo – Crea nuevas columnas en esta Clase;
Para acceder a estas opciones de configuración debe ir al icono del pequeño escudo en el menú rápido de la parte superior derecha de Class.
Después de hacer clic en el icono del escudo, verá el menú simple sólo con opciones de lectura/escritura disponibles. Haga clic en el icono superior derecho de su ventana para acceder a Configuración avanzada de CLPs.
A continuación, verá la ventana de configuración completa del CLP.
Listas de control de acceso – ACL
Las Listas de Control de Acceso le permiten controlar el acceso a cada objeto de una Clase determinada de forma diferente. Puede crear una ACL a un objeto y configurar el acceso (lectura/escritura) para cada Rol o Usuario.
Parse siempre requiere un ACL para crear cualquier rol. Por lo tanto, para crear el Primer Rol necesitarás un usuario. Vamos a crear un usuario root para crear los Primeros Roles en nuestra App. Este usuario será el único que podrá editar estos Roles.
En primer lugar, podemos crear el usuario root simplemente rellenando nombre de usuario y una contraseña en la Tabla de Usuarios.
Luego se copia el ObjectId del Usuario raiz y se va al Role Class. Crea un nuevo Rol y haz doble click en el campo ACL para crear la ACL. En este caso, voy a permitir que el usuario root lea/escriba esta ACL, así que vamos a llenar la ACL con el ObjectID del usuario root y luego la guardamos.
Después de este paso, démosle a este Rol el nombre Admin y asociemos los usuarios Alex y Alysson. Como la clase Role tiene una relación con la clase User, puedes hacer click en overview relation y luego agregar los ObjectIDs del usuario que quieres agregar a esta relación.
Ahora tienes un Role Admin con 2 usuarios que puedes usar para componer nuevos Roles, para atribuir en nuevos ACLs o CLPs.
Lista de comprobación de la aplicación de seguridad
Ahora que estás familiarizado con los principales conceptos de seguridad de Parse, me gustaría sugerirte algunos consejos para hacer tu aplicación más segura.
1-Mantenga la llave maestra a salvo
La Llave Ma estra es el mecanismo de Parse para saltarse todas las demás capas de seguridad. Una buena comparación es tener la App Master Key para una App es como tener el acceso root de un Servidor.
Esta es la razón por la que tienes que proteger esta clave y cuando sea necesario utilizar la clave sólo a través de código en la nube. Debes evitar usarla en tu código front-end porque alguien puede descompilar o, en el caso de JS, simplemente hacer clic en ver código fuente y copiar tu clave.
Otro consejo es que cuando utilices esta clave en un código en la nube te asegures de que no vas a enviar la clave (que forma parte de tu código en la nube) a ningún repositorio de código público.
2-Desmarcar la creación de clases cliente
Cuando usted crea una nueva App en Back4App la Parse Key allowClientClassCreation es habilitada. Eso significa que cualquier persona con el AppID y Client Key puede crear nuevas clases en su base de datos.
Usted puede cambiar esta configuración en Back4App en la opción de menú Configuración del Servidor->Configuración del Núcleo->Configuración.
Desplácese hacia abajo y desmarque la opción “Permitir la creación de clases cliente” como se muestra a continuación.
La recomendación aquí es mantener esta opción activada mientras desarrollas tu aplicación y una vez que termines entonces quitarla.
3-Crear una estructura de funciones
Como hemos empezado en la sección ACL puedes continuar y construir una estructura de roles para controlar mejor el acceso a todas las clases y objetos de tu aplicación. Digamos que usted está construyendo un Uber-Clone-App y tiene 3 accesos principales: Admin, Pasajeros, Conductores.
4-Configurar CLP para usuarios y funciones
Como User es una Parse Class por defecto, cualquiera con el nombre de la clase, la REST API key y el App ID puede solicitar toda tu lista de usuarios haciendo un único comando curl:
curl -X GET -H "X-Parse-Application-Id: FyebII2zNpA2i9DdZ8froWna9vIvJMcgjfmjS0iK" -H "X-Parse-REST-API-Key: hluEgfZ084RdR0MyyE8Y9v4RwsOsTIWlJeCc4qGw" https://parseapi.back4app.com/users
Y recuperar la Lista de Usuarios:
Puedes evitar eso creando un CLP y limitando el Poder de quien puede leer/escribir tu Tabla de Usuarios (También es posible hacer protección usando ACLs). En este caso, voy a permitir que solo los Usuarios Administradores puedan leer la Lista de Usuarios completa.
Puede realizar un proceso similar al de la Clase de Rol y eliminar el acceso de los Roles/Usuarios que no necesiten leer la clase completa.
La clase Session está protegida por defecto porque todos los objetos Session
tienen una ACL creada automáticamente que sólo puede leer y escribir ese usuario.
5-Hacer que las clases fijas sean de sólo lectura
Si tienes tablas/clases que sólo quieres cambiar a través de Parse Dashboard puedes hacerlas de sólo lectura usando el CLP. En mi caso, construí una clase que define la ciudad donde mi Uber-Clone-App va a operar.
Quiero cambiar esta clase sólo a través de Parse Dashboard por lo que voy a eliminar los derechos de acceso de escritura de todos los demás roles.
6-Consejos generales CLP y ACL
La mayoría de las clases en tu aplicación caerán en una de un par de categorías fáciles de asegurar. Para los datos totalmente públicos, puede utilizar permisos a nivel de clase para bloquear la tabla para poner públicamente legible y escribible por nadie. Para los datos totalmente privados, puede utilizar ACLs para asegurarse de que sólo el usuario propietario de los datos puede leerlos.
Pero, en ocasiones, te encontrarás con situaciones en las que no querrás que los datos sean totalmente públicos o privados. Por ejemplo, puede que tengas una aplicación social en la que los datos de un usuario sólo puedan ser leídos por los amigos que éste haya aprobado. Para ello, necesitarás una combinación de las técnicas descritas en esta guía para habilitar exactamente las reglas de compartición que deseas.
Consulte este vídeo sobre Cómo crear ACL para obtener más detalles.
7-Determine la duración de su sesión (sólo en algunos casos)
Si usted está desarrollando una aplicación que involucra información muy sensible (aplicación bancaria, aplicación de salud) y es posible que necesite cerrar la sesión de los usuarios después de un corto período de tiempo.
Para limitar la duración de la sesión, vaya a Configuración del servidor->Configuración de la aplicación personalizada.
En el cuadro de texto Opciones de Parse personalizadas defina la duración de la sesión en segundos. En el caso de abajo estoy definiendo una Sesión de 10 minutos. A continuación, haga clic en Guardar.
8-Utilizar Https y SSL
Https es un protocolo seguro para transferir información desde el navegador del cliente a su servidor. Es necesario para evitar que los hackers accedan a información sensible con ataques como el MITM.
El consejo aquí es usar Https sobre Http para establecer conexiones con Parse Server. Abajo hay un ejemplo usando una Conexión JS con Parse que muestra cómo usar https correctamente para establecer una conexión activa. Tenga en cuenta que la forma incorrecta sería utilizando http:// en lugar de https://.
Parse.initialize("APP_ID", "JS_KEY"); Parse.serverURL = 'https://parseapi.back4app.com/'
Si está utilizando Back4App Webhosting es importante tener en cuenta que Back4App ya proporciona una conexión https por defecto (¡debe utilizar https:// en sus llamadas!).
Pero si desea utilizar su propio nombre de dominio y redirigir a los servidores de Back4App asegúrese de que su certificado SSL es válido y está correctamente instalado y que está haciendo las redirecciones a Back4App utilizando https.
Palabras finales
Back4App y Parse ofrecen varias formas de proteger los datos en el Cloud. A medida que construyas tu App y evalúes los tipos de datos que vas a almacenar, podrás tomar la decisión sobre qué implementación elegir.
Esperamos que utilices estas herramientas para hacer todo lo posible por mantener seguros los datos de tu aplicación y los de tus usuarios. Juntos podemos hacer de Internet un lugar más seguro.