Asegurar una API web en MVC

1

Tengo un simple ASP MVC 6 WebAPI en el que estoy trabajando actualmente, en el que los usuarios registrados pueden llamar a los datos de solicitud utilizando una muestra de la URL a continuación:

http://localhost:7988/api/b8pE5Qodiw/elections/Prop1/Prop2/Prop3

b8pE5Qodiw se refiere al código API único para un usuario confirmado. Esto lo genera la aplicación y el usuario no puede usarlo hasta que confirme su correo electrónico.

Estoy generando el código siguiendo la respuesta en esta pregunta SO

Desde el punto de vista de la seguridad, ¿sus posibles problemas son tener el código API del usuario en la URL y cómo estoy generando el código API?

Existe una práctica recomendada sobre cómo RESTful services genera las URL de API

    
pregunta hello 07.12.2016 - 17:44
fuente

1 respuesta

2

Hay un problema bastante importante que es evidente de inmediato, pero puede ser un artefacto de su entorno de desarrollo: la solicitud se transmite a través de http simple, lo que significa que la clave de API está disponible para cualquier persona que realice una tarea en el medio ataque.

La solución para esto, por supuesto, es solo hacer este tipo de solicitudes a través de https. No puede controlar lo que hacen sus usuarios (después de todo, solo podrían publicar su clave en la web), pero puede alentar este comportamiento. Las posibles formas de hacer esto incluyen:

  • garantizando que todos tus ejemplos utilicen https
  • grandes advertencias en la documentación
  • devolver una página de error, en lugar de una redirección, cuando se envía una solicitud de API a través de http
  • habilitar hsts para tu dominio (aunque no creo que esto tenga ningún efecto en los programas personalizados basados en rizos)

Como se mencionó en los comentarios, mover la clave al cuerpo de la solicitud evitará que aparezca en sus registros de acceso, que pueden tratarse con menos rigor de seguridad que su base de datos.

Personalmente, tus llaves me parecen demasiado cortas. Son utilizados por programas, no por humanos, por lo que no hay razón para no tener una clave mucho más larga que va mucho más allá de lo que uno podría imaginar que es posible adivinar (recuerde que un atacante no necesita adivinar un específico key, pero cualquiera que sea válida).

    
respondido por el Xiong Chiamiov 07.12.2016 - 18:10
fuente

Lea otras preguntas en las etiquetas