Кіріспе

Веб-серверлер мен веб-клиенттерге енгізілетін мүмкіндіктер HTTP компрессиясы - бұл веб-серверлер мен веб-клиенттерге көшіру жылдамдығын және жолақтықты пайдалануды жақсарту үшін енгізілетін мүмкіндіктер. HTTP деректері серверден жіберілгенге дейін сығылады: сәйкес келетін браузерлер дұрыс форматты жүктеместен бұрын серверге қандай әдістер қолдайтынын хабарлайды; сәйкес келетін сығылу әдісін қолдамайтын браузерлер сығылмаған деректерді жүктейді. Ең көп таралған компрессиялық схемаларға gzip және Brotli кіреді; IANA қол жетімді схемалардың толық тізімін жүргізеді. HTTP-де қысудың екі түрлі әдісі бар. Төменгі деңгейде Transfer Encoding бас өрісі HTTP хабарламасының пайдалы жүктемесі сығылғандығын көрсете алады. Жоғары деңгейде мазмұнды кодтау басты өрісі ресурстың көшіріліп, кэштей немесе басқаша сілтеме жасалып жатқанын көрсетеді. Контент-кодтауды пайдалану арқылы сығылу Трансферт-кодтаудан гөрі кеңінен қолдайды, ал кейбір браузерлер серверлерде қателерді тудырмау үшін Трансферт-кодтауды сығылуды қолдамайды.

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-ті ықшамдауды іске асырады, оны шын мәнінде сөндіру мүмкін емес, өйткені барлық веб-серверлер оны пайдаланушылар үшін деректерді беру жылдамдығын жақсарту үшін қолданады.