API REST segura sin inicio de sesión para muy pocos clientes

1

Estoy diseñando un dispositivo de recolección de datos muy simple para un proyecto de investigación. Debido a que estamos registrando, entre otras cosas, la posición GPS de los vehículos reales, necesitamos proteger los datos. Ya que implementamos manualmente cada dispositivo de registro, no hay necesidad de registros o inicios de sesión.

He configurado un servidor web (Node.js), una base de datos (MongoDB), una aplicación (iOS nativo) y un formato de datos (JSON). El cliente envía regularmente JSON al servidor web con el siguiente comando:

PUT/store/[deviceId]/?hash=[hash]

(con los datos reales como una variable POST)

Donde deviceId es un identificador simple, por ahora solo un número (0, 1 o 2), para que elija en qué colección MongoDB almacenar los datos.

El hash es un hash del verbo HTTP, la url y el secreto del dispositivo (solo una cadena aleatoria codificada en cada dispositivo), inspirado en esta respuesta .

Mi preocupación aquí es qué tan seguro es este sistema. Estoy usando HTTPS para proteger la transferencia de datos, y el secreto del dispositivo para asegurarme de que sea uno de nuestros dispositivos, y no el hijo del vecino que intenta hackearnos.

¿Es eso suficiente?

    
pregunta Erlend D. 05.03.2015 - 09:31
fuente

1 respuesta

0

Para responder a su pregunta, primero debe reunir información: - ¿Qué riesgos hay que quieras mitigar a través de la seguridad? - ¿Qué técnicas de prevención desea emplear y cuánto dinero está dispuesto a gastar en ellas? - ¿Tiene alguna forma de detección de intrusión? - ¿Utiliza un firewall?

para el resto, HTTPS es un buen paso, pero para este tipo de "investigación" una verificación con certificados del lado del cliente podría ser adecuada. esto significa que no solo se aseguran los datos en tránsito. pero solo los clientes que conocen su forma "secreta" de comunicarse con usted pueden (por ejemplo, el certificado del cliente debe ser válido o el servidor ni siquiera escuchará la solicitud)

para el almacenamiento de datos críticos mongoDB no es la mejor solución (puede perder datos o incluso no almacenarlos en absoluto) Pero eso es una discusión para otro hilo (como los programadores o sysadmin stackexchange).

En el aspecto de las cosas, para un uso a gran escala no es tan malo. simplemente agregue un poco de detección de intrusos y detección de uso indebido (nadie debe probar cadenas aleatorias en su back-end sin que se le haya prohibido su firewall durante al menos 10 minutos después de cada intento, incrementándose exponencialmente con cada intento, u otra metodología de seguridad). p>

Además, en este momento no tiene protección contra los ataques de repetición. agregue una parte sensible al tiempo a sus datos que se bloquee después de un tiempo (como lo hace una cookie de sesión o un token CSRF). un contador que se incremente después de cada envío de solicitud podría hacer este truco ya.

    
respondido por el LvB 05.03.2015 - 11:36
fuente

Lea otras preguntas en las etiquetas