HTTPS POST encabezado de solicitud versus cuerpo de solicitud

13

¿Existe alguna diferencia de seguridad entre la colocación de datos confidenciales, como una clave de API en una solicitud POST encabezado frente a la solicitud POST cuerpo asumiendo que el servidor API es solo para HTTPS ?

Si bien ve con frecuencia las claves API en el encabezado de Autorización o un encabezado X-API-KEY personalizado, ¿la colocación de la clave en el encabezado realmente aumenta el nivel de seguridad de la clave o es estrictamente una convención de diseño de API?

    
pregunta pxwise 26.08.2015 - 19:37
fuente

2 respuestas

10

Si el transporte en sí está asegurado (es decir, https), un atacante no puede rastrear los datos. Pero podría estar registrado en el lado del servidor y el servidor podría verse comprometido más adelante o una fuga de seguridad podría hacer que los archivos de registro sean visibles públicamente. Dichos archivos de registro generalmente contienen la URL y pueden contener otras líneas de los encabezados como User-Agent, Referer y otros encabezados si se especifican con un formato de registro personalizado. Por lo tanto, podría ser una mala idea poner estas claves API en el encabezado de la solicitud, a menos que se asegure de que no se registren.

Un argumento en contra de poner la clave en el cuerpo de la solicitud es que ahora sería posible crear un formulario HTTP simple que incluya la clave que es más fácil de usar como una solicitud CSRF. Cuando se incluye la clave API como encabezado, el atacante debe poder realizar una solicitud XHR y está sujeto a las restricciones de CORS .

Otra razón para no incluir la clave en la URL es que podría incluirse en el encabezado del Referer de una solicitud siguiente. Además, las direcciones URL generalmente se encuentran en el historial de los navegadores para que tenga otro lugar que pueda verse comprometido. Esto es relevante solo para las solicitudes normales del navegador, es decir, las solicitudes de XHR o REST que realizan las aplicaciones no se ven afectadas.

Algunas explicaciones sobre el significado de "encabezado": a veces se usa el nombre 'encabezado' para distinguir la parte inicial del mensaje HTTP y el cuerpo. En este caso, la URL es parte del encabezado (línea de solicitud). Otras veces se habla de los encabezados (plural) y significa solo los pares "campo: valor", es decir, sin incluir la línea de solicitud con la URL. No está completamente claro para mí qué significado se usa en la pregunta, así que mejor cubriré ambas.

    
respondido por el Steffen Ullrich 26.08.2015 - 19:49
fuente
4

No creo que haya una ventaja de seguridad significativa para usarlo en un encabezado HTTP (sin contar la URL que se envía en la línea de solicitud que inicia la solicitud HTTP, donde tiene que ser más consciente de que haya iniciado sesión el historial de su navegador o los registros del servidor) frente a estar en un cuerpo de solicitud POST.

La ventaja de enviar claves en un "Encabezado de autorización o un encabezado X-API-KEY personalizado" sería la separación y la coherencia entre los múltiples métodos de su API. Es decir, puede manejar la autenticación con el mismo código de servidor para los métodos GET, POST, PUT, etc., marcando el campo de encabezado que utiliza la API. Además, si el usuario necesita enviar otros datos POST / PUT en el cuerpo de la solicitud como parte de su solicitud de API, se mantiene separado de los datos de autenticación.

    
respondido por el dr jimbob 26.08.2015 - 20:14
fuente

Lea otras preguntas en las etiquetas