¿Qué mecanismos de seguridad tiene Meteor? [cerrado]

92

Todos sabemos que Meteor ofrece el controlador miniMongo que permite al cliente acceder sin problemas a la capa persistente (MongoDB).

Si cualquier cliente puede acceder a la API persistente, ¿cómo se asegura su aplicación?

¿Cuáles son los mecanismos de seguridad que proporciona Meteor y en qué contexto deben utilizarse?

Olivier Refalo
fuente
6
Me encanta que esto ya se esté abordando, pero realmente deberían haberlo mencionado en el video. Creo que casi cualquier desarrollador web que lo vea tendrá esta pregunta en mente a partir de los 10 segundos hasta el final, y simplemente se sentirá molesto porque, para un producto tan increíble, PARECE estar ignorando por completo el obvio problema de seguridad.
Naatan
6
Meteor 0.5.0 agregó autenticación de usuario meteor.com/blog/2012/10/17/…
hipertracker
Puede reformular esto un poco para que se vuelva a abrir. Quizás "¿Qué medidas de seguridad debo tomar?" o "¿Qué opciones de seguridad están disponibles?"
joeytwiddle
1
¿Basado en opiniones? Wat? Creo que se trata de una auditoría de reapertura ya que obviamente no se basa en opiniones.
bjb568
Estoy de acuerdo, la decisión basada en opiniones está fuera de contexto, las respuestas se basan en hechos verdaderos.
Olivier Refalo

Respuestas:

64

Cuando crea una aplicación usando el comando meteor, de forma predeterminada, la aplicación incluye los siguientes paquetes:

  • PUBLICACIÓN AUTOMÁTICA
  • INSEGURO

Juntos, estos imitan el efecto de que cada cliente tenga acceso completo de lectura / escritura a la base de datos del servidor. Estas son herramientas útiles para la creación de prototipos (solo con fines de desarrollo), pero normalmente no son adecuadas para aplicaciones de producción. Cuando esté listo para el lanzamiento de producción, simplemente elimine estos paquetes.

Para agregar más, Meteor admite paquetes de Facebook / Twitter / y Much More para manejar la autenticación, y el más genial es el paquete Accounts-UI

Murali Ramakrishnan
fuente
2
Correcto a partir del meteorito 0.5
Olivier Refalo
5
Inseguro por defecto. ¡Ay!
Judah Gabriel Himango
16
@JudahHimango es inseguro solo para fines de prueba , y eliminar esos dos paquetes cuando esté listo para la producción es tan fácil como meteor remove autopublish insecure.
BenjaminRH
1
¿Qué pasa con los métodos de meteoritos? El cliente puede acceder a los de la consola incluso con desinstalados inseguros, porque se ejecutan en el servidor. ¿Cómo se pueden asegurar?
Matanya
2
@Matanya, pero al usarlos y ejecutarlos desde la consola, arrojará un access deniederror. Echale un vistazo.
ajduke
35

En las colecciones, el documento dice:

Actualmente, el cliente tiene acceso de escritura completo a la colección. Pueden ejecutar comandos de actualización de Mongo arbitrarios. Una vez que creemos la autenticación, podrá limitar el acceso directo del cliente para insertar, actualizar y eliminar. También estamos considerando validadores y otras funciones similares a ORM.

Pomber
fuente
1
También vea este hilo en Quora con una respuesta de uno de los desarrolladores de Meteor: quora.com/Meteor-web-framework/Whats-cool-about-Meteor/answer/…
dentarg
1
@jonathanKingston el enlace está roto, ¿podría actualizarlo por favor?
Carlos Barcelona
@CarlosBarcelona El dominio expiró y el artículo era anterior a las actualizaciones de seguridad en Meteor. Creo que es justo decir que estaba desactualizado; así que eliminé el comentario para ahorrar tiempo a la gente. Gracias
jonathanKingston
5

Si está hablando de restringir al cliente para que no use ninguna de sus API de inserción / actualización / eliminación no autorizadas, eso es posible.

Vea su aplicación todo en https://github.com/meteor/meteor/tree/171816005fa2e263ba54d08d596e5b94dea47b0d/examples/todos

Además, ahora han agregado un módulo AUTH integrado, que le permite iniciar sesión y registrarse. Entonces es seguro. En lo que respecta a XSS, Valiations, encabezados de cliente, etc.

pero cualquier día puede convertir la aplicación de meteoritos en una aplicación de nodejs completamente funcional mediante la implementación en node. Entonces, si sabe cómo proteger una aplicación nodejs, debería poder proteger meteor.

Hitesh Joshi
fuente
1
Esto es completamente cierto a partir de septiembre de 2012
Olivier Refalo
2

A partir de 0.6.4, durante el modo de desarrollo, los bloques is_client e is_server siguen yendo al sistema cliente. No puedo decir si están segregados cuando apagas el modo de desarrollo.

Sin embargo, si no es así, un hacker podría obtener información sobre el sistema revisando los bloques del código if (Meteor.is_server). Eso me preocupa particularmente, especialmente porque noté que todavía en este punto no puedo segregar Colecciones en archivos separados en el cliente y el servidor.

Actualizar

Bueno, el punto es que no coloque el código relacionado con la seguridad en un bloque is_server en un directorio que no sea del servidor (es decir, asegúrese de que esté en algo debajo de / server.

Quería ver si estaba loco por no poder segregar Colecciones de cliente y servidor en los directorios de cliente y servidor. De hecho, no hay ningún problema con esto.

Aquí está mi prueba. Es un ejemplo simple del modelo de publicación / suscripción que parece funcionar bien. http://goo.gl/E1c56

DrM
fuente
1
La solución sería guardar su código en el servidor / carpeta, de esta manera no se enviará al cliente.
Olivier Refalo
DrM, consulte docs.meteor.com/#structuringyourapp - no es necesario entregar el código confidencial al cliente
emgee
Intente algo simple; cree una colección en un archivo del servidor, luego cree esa misma colección en el archivo del cliente y dígame qué sucede. A continuación, cree un archivo raíz con la declaración de la colección, luego simplemente haga referencia a eso en un archivo de directorio de servidor y cliente y dígame qué sucede. Si no puede crear la colección, como yo no pude, ¿cómo puede hacer referencia a estos de forma independiente? Al final, necesita que la referencia a la colección exista en el mismo archivo disponible del cliente y use is_server e is_client. Espero estar equivocado, pero aún no he descubierto cómo ni por qué.
DrM
Hmm, extraño, las pruebas parecen estar bien, actualizará la respuesta
DrM
El enlace es un repositorio a código simple, pero parece funcionar bien, no estoy seguro de cuáles fueron los errores extraños en el pasado o cómo podría recrearlos.
DrM