¿Se beneficia de especificar el conjunto de caracteres JSON Content-Type?

4

Según el Estándar de verificación de seguridad de aplicaciones OWASP :

  

V11.3 Verifique que cada respuesta HTTP contenga un encabezado de tipo de contenido   especificando un conjunto de caracteres seguro (por ejemplo, UTF-8).

Según el RFC para la aplicación / json Media Type :

  

El texto JSON DEBE estar codificado en Unicode. La codificación predeterminada es UTF-8.

     

Dado que los dos primeros caracteres de un texto JSON siempre serán ASCII   caracteres [RFC0020], es posible determinar si un octeto   la secuencia es UTF-8, UTF-16 (BE o LE), o UTF-32 (BE o LE) mirando   en el patrón de nulos en los primeros cuatro octetos.

Si su codificación es de hecho UTF-8, esto implica que no hay ningún beneficio de seguridad al establecer el encabezado Content-Type en application/json; charset=utf-8 en lugar de solo application/json .

¿Es razonable hacer una excepción a la regla OWASP para application/json ?

    
pregunta oggmonster 03.03.2015 - 11:04
fuente

1 respuesta

2

Su mayor riesgo sería versiones anteriores de Internet Explorer que intentan detectar automáticamente la codificación como UTF-7 - llamado Detección de la página de códigos .

Parece que Internet Explorer solo lo hará para las páginas web, y no para las solicitudes AJAX. Por lo tanto, las solicitudes JSON deben ser seguras. Además, las solicitudes JSON no causan la representación del contenido directamente en la página, ya que necesitarían un procesamiento de JavaScript para manipular el DOM, por lo que esto solo sería preocupante cuando recuperara datos que supuestamente han sido codificados antes del código HTML. Por lo tanto, si los datos JSON están codificados en HTML en el cliente, la codificación de la página debería tener prioridad y no causaría la conversión de las secuencias de caracteres +ADw- a paréntesis angulares, que es donde el riesgo está en UTF-7.

Por lo tanto, diría que especificar charset=utf-8 solo es necesario para las páginas Content-Type: text/html .

    
respondido por el SilverlightFox 04.03.2015 - 10:45
fuente

Lea otras preguntas en las etiquetas