¿Cómo proporcionar datos de manera segura a un servidor web utilizando un almacén de datos?

2

Tenemos un almacén de datos que almacena los precios de nuestros productos. Una vez cada día hábil, se agregan nuevos puntos de datos que representan el precio del día para cada producto. En el sitio web, un usuario ve esta información en una página cargada. Actualmente hay 7 productos; Analytics muestra que la cantidad de cargas de página es de aproximadamente 100 por día.

El servidor del sitio web es un servidor externo a nuestro centro de datos. El servidor del almacén de datos es interno de nuestro centro de datos y tiene otros datos críticos (en diferentes tablas) que no están relacionados y no deben ser accesibles al sitio web.

Se han considerado los siguientes enfoques:

  1. El almacén de datos podría enviar diariamente (SFTP) un archivo CSV que contiene los datos diarios al servidor web. El servidor web tendría un proceso ejecutándose en un crontab cada 15 minutos. Se comprobaría si el archivo había cambiado. De ser así, actualizaría su base de datos con los datos. Luego, en las cargas de página, el servidor web consultaría su base de datos para obtener los datos que se mostrarán en la página web.

    Por lo general, el impulso solo sería una vez al día, pero más de un impulso podría ser posible para comunicar correcciones de precios (poco frecuentes). Incluso en el escenario de corrección de precios, todos los datos se entregarían en el archivo. El proceso de sondeo recogería el cambio y sobrescribiría los datos en la base de datos.

  2. El servidor web podría solicitar datos del almacén de datos mediante JDBC o una tecnología de conexión SQL similar.

    Sin embargo, se han expresado preocupaciones de seguridad. La preocupación es que al permitir que el servidor web acceda a nuestro almacén de datos, un ataque de inyección SQL o algún otro ataque externo a través del sitio web podría poner en peligro el almacén de datos. Se podrían implementar medidas para reducir el riesgo, pero se sugirió el enfoque más fácil y seguro para simplemente no permitir que ningún sistema público acceda directamente al almacén de datos. En otras palabras, el almacén de datos puede establecer una comunicación con otros servidores (por ejemplo, SFTP el archivo), pero ningún servidor puede iniciar una conexión con el almacén de datos. ¿Estas preocupaciones parecen razonables y difíciles de mitigar?

  3. Se podría construir un servicio web, y el servidor web podría llamar al servicio web que está alojado en nuestro centro de datos interno.

  4. Un proceso alojado en nuestro centro de datos interno podría llamar al servidor web cuando sepa que el almacén de datos tiene datos disponibles. Si es así, ¿cómo debería hacerse esto? ¿HTTPS con alguna forma de evitar que otros clientes no autorizados realicen la misma llamada?

¿Cuál de los enfoques anteriores es mejor o hay un enfoque mejor que el que se enumera arriba? ¿Cuáles son los pros y los contras de un enfoque?

    
pregunta James 10.01.2014 - 16:46
fuente

2 respuestas

1

Dado que su almacén contiene datos adicionales a los que no desea exponer un nuevo vector de ataque, parece que su mejor opción es implementar algún tipo de capa básica de almacenamiento en caché para estos datos en el servidor web que el almacén puede enviar. a.

Tendría algún tipo de servicio ejecutándose en su entorno de almacén seguro que impulsa una representación serializada de sus datos necesarios a un almacén de valor clave o similar (redis, memcached, lo que sea) que se ejecute en su servidor web. Esto debería ser más sencillo y potencialmente más seguro que tener que lidiar con un archivo CSV. Es solo una cuestión del servicio en el almacén de datos que sabe cuándo y cómo destruir la memoria caché.

Como mencionó, no hay razón para que no pueda conectarse a su servidor web con una conexión HTTPS segura para realizar la inserción. Alternativamente, también puede implementar un cifrado básico para proteger los datos mientras se encuentra en tránsito, aunque parece que los datos que necesita su servidor web no son datos confidenciales, por lo que este paso puede ser excesivo.

Nuevamente, debido a que su almacén de datos tiene datos confidenciales, le aconsejo que no intente crear algún tipo de API que el servidor web pueda consultar. No hay nada intrínsecamente malo en hacerlo, pero ciertamente abre los vectores de ataque y hace que el proyecto sea mucho más complicado de lo que parece que debe ser, ya que no suena como si tuvieras que hacer diferentes tipos de consultas, solo necesitas uno parte particular de los datos. Lo que realmente hace que esta sea una "conversación unidireccional" donde la carga recae en el almacén para asegurarse de que se eliminen los datos "públicos".

Si en el futuro hay una necesidad de consultar, actualizar o, de lo contrario, mantener una "conversación bidireccional" con el almacén desde el servidor web, sería conveniente separar los datos de los datos confidenciales antes de implementarlos esencialmente "abiertos". API de punto (s).

¡Buena suerte!

    
respondido por el Matt Surabian 13.01.2014 - 20:15
fuente
0

De sus opciones, 3 - Exponer un servicio web seguro es la mejor.

Al evitar las opciones anticuadas (opción 1) e innecesariamente peligrosas (opción 2), hay formas de proteger los servicios web. El NIST publica una muy buena lectura en enlace , y le recomiendo dar Es una lectura completa antes de comenzar.

Puede proporcionar mecanismos de autenticación y autorización al implementar estos servicios, generalmente con la WS-Security suite . (Los nodos XML pueden ser cifrados y firmados individualmente). Además, hay muchos tutoriales y preguntas aquí para asegurar los servicios.

En lo que respecta a contras (asegúrese de leer en el PDF anterior las "Preocupaciones de seguridad de WS-Security", que cubren los escollos de una configuración incorrecta), el costo de desarrollo de un servicio web debidamente protegido sería relativamente alto para sus otras opciones, pero los beneficios de la autenticación y la autorización son muy superiores a ellas.

    
respondido por el Rubber Duck 13.01.2014 - 20:37
fuente

Lea otras preguntas en las etiquetas