Введение
Возможность, которая может быть встроена в веб-серверы и веб-клиенты HTTP-сжатие - это возможность, которая может быть встроена в веб-серверы и веб-клиенты для улучшения скорости передачи и использования полосы пропускания. Данные HTTP сжимаются до того, как они отправляются с сервера: совместимые браузеры объявят, какие методы поддерживаются на сервере, прежде чем загружать правильный формат; браузеры, которые не поддерживают совместимый метод сжатия, загрузят не сжатые данные. Наиболее распространенными схемами сжатия являются gzip и Brotli; полный список доступных схем поддерживается IANA. Есть два различных способа сжатия может быть сделано в HTTP. На более низком уровне поле заголовка кодирования передачи может указывать на то, что полезная нагрузка сообщения HTTP сжата. На более высоком уровне поле заголовка Content Encoding может указывать, что ресурс, передаваемый, кэшируемый или иным образом ссылаемый, сжат. Сжатие с использованием кодирования контента более широко поддерживается, чем кодирование передачи, и некоторые браузеры не рекламируют поддержку сжатия кодирования передачи, чтобы избежать возникновения ошибок на серверах.
HTTP compression is a capability that can be built into web servers and web clients to improve transfer speed and bandwidth utilization. HTTP data is compressed before it is sent from the server: compliant browsers will announce what methods are supported to the server before downloading the correct format; browsers that do not support compliant compression method will download uncompressed data. The most common compression schemes include gzip and Brotli; a full list of available schemes is maintained by the IANA. There are two different ways compression can be done in HTTP. At a lower level, a Transfer Encoding header field may indicate the payload of an HTTP message is compressed. At a higher level, a Content Encoding header field may indicate that a resource being transferred, cached, or otherwise referenced is compressed. Compression using Content Encoding is more widely supported than Transfer Encoding, and some browsers do not advertise support for Transfer Encoding compression to avoid triggering bugs in servers.
Проблемы, препятствующие использованию сжатия HTTP
В статье 2009 года инженеры Google Арвинд Джейн и Джейсон Глазго утверждают, что более 99 человеческих лет ежедневно теряются из-за увеличения времени загрузки страницы, когда пользователи не получают сжатый контент. Это происходит, когда антивирусные программы мешают соединениям, чтобы заставить их быть разжатыми, когда используются прокси-серверы (с чрезмерно осторожными веб-браузерами), когда серверы неправильно настроены и когда браузерные ошибки останавливают использование сжатия. Internet Explorer 6, который опускается до HTTP 1.0 (без функций, таких как сжатие или трубопроводы), когда за прокси - общая конфигурация в корпоративных средах - был основным браузером, наиболее подверженным отказу на не сжатый HTTP. что делает его развертывание ненадежным. По этой причине некоторые программы, включая Apache HTTP Server, реализуют только кодирование gzip.
Последствия для безопасности
Сжатие позволяет выполнять форму атаки с выбранным простым текстом: если злоумышленник может ввести любой выбранный контент на страницу, он может узнать, содержит ли страница его данный контент, наблюдая увеличение размера зашифрованного потока. Если увеличение меньше, чем ожидалось для случайных инъекций, это означает, что компрессор обнаружил повторение в тексте, т. е. инъекционное содержание перекрывает секретную информацию. Это идея, лежащая в основе КРИМЭ. В 2012 году была объявлена общая атака против использования сжатия данных, называемая CRIME. В то время как атака CRIME могла эффективно работать против большого количества протоколов, включая, но не ограничиваясь TLS, и протоколы прикладного уровня, такие как SPDY или HTTP, только эксплойты против TLS и SPDY были продемонстрированы и в значительной степени смягчены в браузерах и серверах. Эксплойт CRIME против сжатия HTTP не был смягчен вообще, хотя авторы CRIME предупредили, что эта уязвимость может быть даже более распространенной, чем SPDY и TLS сжатие вместе взятые. В 2013 году был опубликован новый пример атаки CRIME против сжатия HTTP, получившей название BREACH. Взломная атака может извлечь логин-токены, адреса электронной почты или другую конфиденциальную информацию из зашифрованного веб-трафика TLS всего за 30 секунд (в зависимости от количества извлекаемых байтов), при условии, что злоумышленник обманывает жертву, заставляя посетить вредоносную веб-ссылку. Все версии TLS и SSL подвержены риску BREACH независимо от используемого алгоритма шифрования или шифра. В отличие от предыдущих примеров CRIME, которые можно успешно защитить от отключения сжатия TLS или сжатия заголовков SPDY, BREACH использует сжатие HTTP, которое невозможно реалистично отключить, поскольку практически все веб-серверы полагаются на него для улучшения скорости передачи данных для пользователей.