stringtranslate.com

Compresión HTTP

La compresión HTTP es una capacidad que se puede integrar en servidores y clientes web para mejorar la velocidad de transferencia y la utilización del ancho de banda. [1]

Los datos HTTP se comprimen antes de enviarlos desde el servidor: los navegadores compatibles anunciarán al servidor qué métodos son compatibles antes de descargar el formato correcto; Los navegadores que no admiten métodos de compresión compatibles descargarán datos sin comprimir. Los esquemas de compresión más comunes incluyen gzip y Brotli ; La IANA mantiene una lista completa de los esquemas disponibles . [2]

Hay dos formas diferentes de realizar la compresión en HTTP. En un nivel inferior, un campo de encabezado Transfer-Encoding puede indicar que la carga útil de un mensaje HTTP está comprimida. En un nivel superior, un campo de encabezado Content-Encoding puede indicar que un recurso que se transfiere, almacena en caché o al que se hace referencia de otro modo está comprimido. La compresión mediante Content-Encoding es más compatible que Transfer-Encoding, y algunos navegadores no anuncian compatibilidad con la compresión Transfer-Encoding para evitar provocar errores en los servidores. [3]

Negociación del esquema de compresión.

La negociación se realiza en dos pasos, descritos en RFC 2616 y RFC 9110:

1. El cliente web anuncia qué esquemas de compresión admite incluyendo una lista de tokens en la solicitud HTTP . Para Content-Encoding , la lista está en un campo llamado Accept-Encoding ; para Transfer-Encoding , el campo se llama TE .

GET  /área cifrada  HTTP / 1.1 Host :  www.example.com Aceptar codificación :  gzip, deflate

2. Si el servidor admite uno o más esquemas de compresión, los datos salientes pueden comprimirse mediante uno o más métodos admitidos por ambas partes. Si este es el caso, el servidor agregará un campo Content-Encoding o Transfer-Encoding en la respuesta HTTP con los esquemas utilizados, separados por comas.

HTTP / 1.1  200  OK Fecha :  lunes 26 de junio de 2016 22:38:34 GMT Servidor :  Apache/1.3.3.7 (Unix) (Red-Hat/Linux) Última modificación :  miércoles 8 de enero de 2003 23:11:55 GMT Rangos de aceptación :  bytes Longitud del contenido :  438 Conexión :  cerrar Tipo de contenido :  texto/html; charset = Codificación de contenido UTF-8 :  gzip

El servidor web no está de ninguna manera obligado a utilizar ningún método de compresión; esto depende de la configuración interna del servidor web y también puede depender de la arquitectura interna del sitio web en cuestión.

Tokens de codificación de contenido

La IANA mantiene la lista oficial de tokens disponibles para servidores y clientes [4] e incluye:

Además de estos, tanto los servidores como los clientes utilizan una serie de tokens no oficiales o no estandarizados:

Servidores que soportan la compresión HTTP

Muchas redes de entrega de contenido también implementan la compresión HTTP para mejorar la entrega rápida de recursos a los usuarios finales.

La compresión en HTTP también se puede lograr utilizando la funcionalidad de lenguajes de secuencias de comandos del lado del servidor como PHP o lenguajes de programación como Java .

Existen varias herramientas en línea para verificar una implementación funcional de la compresión HTTP. Estas herramientas en línea generalmente solicitan múltiples variantes de una URL, cada una con diferentes encabezados de solicitud (con diferente contenido de codificación de aceptación). Se considera que la compresión HTTP se implementa correctamente cuando el servidor devuelve un documento en formato comprimido. [17] Al comparar los tamaños de los documentos devueltos, se puede calcular la relación de compresión efectiva (incluso entre diferentes algoritmos de compresión).

Problemas que impiden el uso de la compresión HTTP

Un artículo de 2009 de los ingenieros de Google Arvind Jain y Jason Glasgow afirma que se desperdician más de 99 años-persona [18] diariamente debido al aumento en el tiempo de carga de la página cuando los usuarios no reciben contenido comprimido. Esto ocurre cuando el software antivirus interfiere con las conexiones para obligarlas a descomprimirlas, cuando se utilizan servidores proxy (con navegadores web demasiado cautelosos), cuando los servidores están mal configurados y cuando los errores del navegador impiden el uso de la compresión. Internet Explorer 6, que cae a HTTP 1.0 (sin funciones como compresión o canalización) cuando está detrás de un proxy (una configuración común en entornos corporativos) era el navegador principal más propenso a volver a HTTP sin comprimir. [18]

Otro problema encontrado al implementar la compresión HTTP a gran escala se debe a la definición de codificación deflate : mientras que HTTP 1.1 define la codificación deflate como datos comprimidos con deflate (RFC 1951) dentro de una secuencia con formato zlib (RFC 1950), históricamente los productos de servidor y cliente de Microsoft lo implementó como una corriente desinflada "en bruto", [19] haciendo que su implementación no fuera confiable. [20] [21] Por esta razón, algunos programas, incluido el servidor HTTP Apache, solo implementan codificación gzip .

Implicaciones de seguridad

La compresión permite realizar una forma de ataque de texto sin formato elegido : si un atacante puede inyectar cualquier contenido elegido en la página, puede saber si la página contiene el contenido determinado observando el aumento de tamaño de la secuencia cifrada. Si el aumento es menor de lo esperado para inyecciones aleatorias, significa que el compresor ha encontrado una repetición en el texto, es decir, el contenido inyectado se superpone a la información secreta. Esta es la idea detrás del CRIMEN.

En 2012 se anunció un ataque general contra el uso de la compresión de datos, denominado CRIME . Si bien el ataque CRIME podría funcionar eficazmente contra una gran cantidad de protocolos, incluidos, entre otros, TLS y protocolos de capa de aplicación como SPDY o HTTP, solo se demostraron y mitigaron en gran medida los exploits contra TLS y SPDY en navegadores y servidores. El exploit CRIME contra la compresión HTTP no se ha mitigado en absoluto, aunque los autores de CRIME han advertido que esta vulnerabilidad podría estar incluso más extendida que la compresión SPDY y TLS combinadas.

En 2013 se publicó una nueva instancia del ataque CRIME contra la compresión HTTP, denominada BREACH. Un ataque BREACH puede extraer tokens de inicio de sesión, direcciones de correo electrónico u otra información confidencial del tráfico web cifrado TLS en tan solo 30 segundos (dependiendo de la cantidad de bytes que se extraerán), siempre que el atacante engañe a la víctima para que visite un enlace web malicioso. [22] Todas las versiones de TLS y SSL están en riesgo de INCUMPLIMIENTO, independientemente del algoritmo de cifrado o cifrado utilizado. [23] A diferencia de instancias anteriores de CRIME , contra las cuales se puede defender con éxito desactivando la compresión TLS o la compresión de encabezado SPDY, BREACH explota la compresión HTTP que, en realidad, no se puede desactivar, ya que prácticamente todos los servidores web dependen de ella para mejorar las velocidades de transmisión de datos para usuarios. [22]

A partir de 2016, el ataque TIME y el ataque HEIST ahora son de conocimiento público. [24] [25] [26] [27]

Referencias

  1. ^ "Uso de compresión HTTP (IIS 6.0)". Corporación Microsoft . Consultado el 9 de febrero de 2010 .
  2. ^ RFC 2616, Sección 3.5: "La Autoridad de Números Asignados de Internet (IANA) actúa como un registro de tokens de valor de codificación de contenido".
  3. ^ 'RFC2616 "Codificación de transferencia: gzip, fragmentado" no se maneja correctamente', Chromium Issue 94730
  4. ^ "Parámetros del protocolo de transferencia de hipertexto: registro de codificación de contenido HTTP". IANA . Consultado el 18 de abril de 2014 .
  5. ^ "Pruebas de compresión: resultados". Verve Studios, Co. Archivado desde el original el 21 de marzo de 2012 . Consultado el 19 de julio de 2012 .
  6. ^ "JSR 200: formato de transferencia de red para archivos Java". El programa de proceso comunitario de Java.
  7. ^ "ModCompress - Lighttpd". laboratorios ligeros . Consultado el 18 de abril de 2014 .
  8. ^ vincula la descompresión LZMA
  9. ^ "[MS-PCCRTP]: recuperación y almacenamiento en caché de contenido entre pares: extensiones del protocolo de transferencia de hipertexto (HTTP)". Microsoft . Consultado el 19 de abril de 2014 .
  10. ^ "rproxy: definición de protocolo para codificación HTTP rsync". rproxy.samba.org .
  11. ^ "[MS-XCA]: Algoritmo de compresión Xpress" . Consultado el 29 de agosto de 2015 .
  12. ^ "Compresión LZMA2 - MozillaWiki" . Consultado el 18 de abril de 2014 .
  13. ^ "Obtener la página del proyecto GitHub". GitHub . Consultado el 6 de enero de 2017 .
  14. ^ "mod_deflate - Servidor HTTP Apache versión 2.4 - Codificaciones compatibles".
  15. ^ "Parte adicional del manual del servidor web Hiawatha".
  16. ^ "Servicio de archivos estáticos como parte de la documentación de Armeria".
  17. ^ "¿Cómo funciona la comprobación de compresión gzip?".httptools.dev, consultado el 10 de abril de 2022.
  18. ^ ab "Utilice la compresión para acelerar la web". Corporación Google . Consultado el 22 de mayo de 2013 .
  19. ^ "deflate - ¿Por qué los principales sitios web utilizan gzip?". Desbordamiento de pila . Consultado el 18 de abril de 2014 .
  20. ^ "Pruebas de compresión: acerca de". Estudios Verve. Archivado desde el original el 2 de enero de 2015 . Consultado el 18 de abril de 2014 .
  21. ^ "Pierde la espera: compresión HTTP". Rendimiento web de Zoompf . Consultado el 18 de abril de 2014 .
  22. ^ ab Goodin, Dan (1 de agosto de 2013). "Desapareció en 30 segundos: un nuevo ataque extrae secretos de páginas protegidas por HTTPS". Ars Técnica . Conde Nast . Consultado el 2 de agosto de 2013 .
  23. ^ Leyden, John (2 de agosto de 2013). "Adéntrese en la INCUMPLIMIENTO: nuevo ataque desarrollado para leer datos web cifrados". El registro . Consultado el 2 de agosto de 2013 .
  24. ^ Sullivan, Nick (11 de agosto de 2016). "CRIMEN, TIEMPO, INCUMPLIMIENTO y ATRACO: una breve historia de los ataques de compresión de Oracle en HTTPS" . Consultado el 16 de agosto de 2016 .
  25. ^ Goodin, Dan (3 de agosto de 2016). "Exploit HEIST: un nuevo ataque roba SSN, direcciones de correo electrónico y más de páginas HTTPS" . Consultado el 16 de agosto de 2016 .
  26. ^ Cerveza, Tal. "¿Un crimen perfecto? El TIEMPO lo dirá" (PDF) .
  27. ^ Vanhoef, Mathy. "HEIST: La información cifrada HTTP se puede robar a través de ventanas TCP" (PDF) .

enlaces externos