Кіріспе
Веб-серверлер мен веб-клиенттерге енгізілетін мүмкіндіктер HTTP компрессиясы - бұл веб-серверлер мен веб-клиенттерге көшіру жылдамдығын және жолақтықты пайдалануды жақсарту үшін енгізілетін мүмкіндіктер. HTTP деректері серверден жіберілгенге дейін сығылады: сәйкес келетін браузерлер дұрыс форматты жүктеместен бұрын серверге қандай әдістер қолдайтынын хабарлайды; сәйкес келетін сығылу әдісін қолдамайтын браузерлер сығылмаған деректерді жүктейді. Ең көп таралған компрессиялық схемаларға gzip және Brotli кіреді; IANA қол жетімді схемалардың толық тізімін жүргізеді. HTTP-де қысудың екі түрлі әдісі бар. Төменгі деңгейде Transfer Encoding бас өрісі HTTP хабарламасының пайдалы жүктемесі сығылғандығын көрсете алады. Жоғары деңгейде мазмұнды кодтау басты өрісі ресурстың көшіріліп, кэштей немесе басқаша сілтеме жасалып жатқанын көрсетеді. Контент-кодтауды пайдалану арқылы сығылу Трансферт-кодтаудан гөрі кеңінен қолдайды, ал кейбір браузерлер серверлерде қателерді тудырмау үшін Трансферт-кодтауды сығылуды қолдамайды.
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 қысуды қолдануға кедергі келтіретін мәселелер
Google инженерлері Арвинд Джайн мен Джейсон Глазгоның 2009 жылғы мақаласында, пайдаланушылар компрессорлы мазмұнды қабылдамағанда, беттің жүктелу уақытының артуына байланысты күн сайын 99 адам жыл ысырап етілетіндігі айтылған. Бұл антивирустық бағдарламалық қамтамасыз ету қосылымдарды оларды сығылмауға мәжбүрлеу үшін араласқанда, проксилер қолданылғанда (өте абай веб-браузерлермен), серверлер дұрыс конфигурацияланбағанда және браузердегі қателер қысуды тоқтатқанда пайда болады. Internet Explorer 6, ол HTTP 1.0-ге түседі (компрессия немесе құбыржол сияқты мүмкіндіктерсіз), проксидің артында - корпоративтік орталарда кең таралған конфигурация - бұл компрессияланбаған HTTP-ге қайта оралуға бейім негізгі браузер болды. Бұл оның іске қосылуын сенімді емес етеді. Осы себепті кейбір бағдарламалық қамтамасыз ету, соның ішінде Apache HTTP сервері тек gzip кодтамасын іске асырады.
Қауіпсіздікке әсері
Сығымдалу таңдалған ашық мәтіндік шабуыл түрін жүргізуге мүмкіндік береді: егер шабуылшы таңдалған мазмұнды параққа енгізе алса, онда олар шифрланған ағыстың көлемінің өсуін байқау арқылы параққа берілген мазмұнның бар-жоғын біле алады. Егер кездейсоқ инъекция кезінде күтілгеннен аз болса, бұл компрессор мәтінде қайталануды тапты дегенді білдіреді, яғни инъекцияланған мазмұн құпия ақпаратпен жақындасады. КРИМ-тің идеясы осы. 2012 жылы CRIME деп аталатын деректерді сығуды қолдануға қарсы жалпы шабуыл жарияланды. CRIME шабуылдары көптеген протоколдарға, соның ішінде TLS және SPDY немесе HTTP сияқты қосымша қабаты протоколдарына қарсы тиімді жұмыс істей алса да, TLS және SPDY-ге қарсы шабуылдар көрсетілді және браузерлер мен серверлерде көбіне жеңілдетілді. CRIME HTTP-ті сығыстыруға қарсы пайдалану мүлдем жеңілдетілмеген, тіпті CRIME авторлары бұл осалдық SPDY және TLS-ті сығыстырудан да кең таралған болуы мүмкін деп ескерткен. 2013 жылы HTTP-ті сығыстыруға қарсы CRIME шабуылдың жаңа үлгісі жарық көрді, ол BREACH деп аталды. BREACH шабуылдары TLS шифрланған веб-трафиктен кіру белгілерін, электрондық пошта мекенжайларын немесе басқа да құпия ақпаратты 30 секунд ішінде (сырып алынатын байттардың санына байланысты) шығарады, егер шабуылшы жәбірленушіні зиянды веб- сілтемені ашуға алдайтын болса. TLS және SSL-нің барлық нұсқалары, шифрлау алгоритміне немесе шифрлау жүйесіне қарамастан, BREACH-тен қауіп төндіреді. CRIME-тің алдыңғы үлгілерінен айырмашылығы, TLS-ті сығыстыруды немесе SPDY-ті басыстыруды сөндіру арқылы сәтті қорғауға болады, BREACH-ті HTTP-ті ықшамдауды іске асырады, оны шын мәнінде сөндіру мүмкін емес, өйткені барлық веб-серверлер оны пайдаланушылар үшін деректерді беру жылдамдығын жақсарту үшін қолданады.