Hacer cumplir HTTPS solo con la API REST

0

Estoy desarrollando una API REST que puede incluir información privada. Para hacerlo seguro, quiero que solo se pueda acceder a la API mediante HTTPS. Básicamente, ¿cuál es la mejor manera de hacer cumplir HTTPS?

Aquí hay algunas cosas en las que estaba pensando cuando se realiza una solicitud HTTP insegura:

  • Establezca el código de estado HTTP en 403 Forbidden
  • Enviar el encabezado Strict-Transport-Security
  • Redirigir a la URL HTTPS usando el encabezado Location
pregunta ub3rst4r 01.08.2017 - 18:43
fuente

1 respuesta

3
  

Estoy desarrollando una API REST que puede incluir información privada. A   hazlo seguro, quiero que solo se pueda acceder a la API mediante HTTPS.   Básicamente, ¿cuál es la mejor manera de hacer cumplir HTTPS?

Si estás haciendo una API, la mejor manera es desactivar HTTP y publicar solo una interfaz HTTPS.

  • El nivel bajo de HTTP es una muleta para los humanos insignificantes. Si está ejecutando un sitio de UI, debe esperar que los humanos intenten acceder a la versión HTTP sin cifrar, porque son así, por eso tenemos tantas formas sofisticadas de redirigirlos. Con una API, puede exigir código de personas a HTTPS, y simplemente no proporcionar HTTP, porque no son usuarios con navegadores que especifican su dirección.
  • Los seres humanos, al menos, tienen navegadores que funcionan para ellos, que tratan de tener en cuenta todas las cosas interesantes que has mencionado (códigos de estado, encabezados). Cuando un programador de API utiliza un cliente API, a menudo ignorarán o serán creativos con cosas como esas. Las 8 líneas de RESTful Python que sacaron de StackExchange no enfatizan el manejo de errores o el corte de encabezado compatible con RFC. Simplemente no puede confiar en que responderán al protocolo HTTP y a las sugerencias de encabezado y redirecciones.
  • Las API tienen menos probabilidades de empujar la entrada no cifrada sobre tu TCP si estás ejecutando HTTPS ... pero no es imposible. (Su primer paquete después del 3WHS podría ser una solicitud JSON cargada de datos en lugar de un TLS CLIENT_HELLO ... pero si nunca reciben una respuesta (y no lo harán si lo hacen), aprenderán a dejar de pegar su muy pronto con ese zócalo.) La lección aquí es, nuevamente, por favor, no confíe en los programadores cliente de API para que hagan lo correcto. Y nunca los recompense ignorando el cifrado con una respuesta legítima, incluso un 403 Prohibido (como podrían obtener si admite HTTP).
  
  • Establezca el código de estado HTTP en 403 Prohibido
  •   
  • Enviar el encabezado Strict-Transport-Security
  •   
  • Redirigir a la URL de HTTPS usando el encabezado de la ubicación
  •   

Todas estas son cosas excelentes si tienes un sitio HTTP y quieres empujar a los humanos con navegadores. Pero cuando se trata de una API, en lugar de un navegador, es un conjunto de suposiciones que tienen menos probabilidades de ser ciertas y menos necesarias en primer lugar.

    
respondido por el gowenfawr 01.08.2017 - 21:16
fuente

Lea otras preguntas en las etiquetas