Он спрятал целую веб-страницу в фавиконку. В треде нашлось три способа чище

Хак упаковывает HTML страницы в пиксели фавиконки, по три байта на пиксель, и рендерит её крошечным загрузчиком. Мило. Потом исследователь безопасности заметил, что загрузчик можно выкинуть вовсе через полиглот HTML/PNG, а кто-то вспомнил deCSS, спрятанный в фавиконке ещё в 2000-м.

Вкратце

Метод: кодируем байты в каналы RGB с 4-байтным заголовком длины. Страница в 208 байт уместилась в 71 пиксель, внутри картинки 9×9, заняв 87% ёмкости.

Что бьёт сильнее: в PNG уже есть текстовые чанки tEXt — встроенные именно для того, чтобы запихивать произвольный текст в обычную с виду картинку.

Хак, если точно

Пост Тима Веле I Stored a Website in a Favicon делает ровно то, что обещает: кодирует HTML страницы прямо в пиксельные данные PNG фавиконки, по три байта на пиксель в каналы R, G и B, с 4-байтным заголовком длины спереди, чтобы декодер знал, где кончается полезная нагрузка. Демо-HTML весил 208 байт; с заголовком — 212 байт, для них нужен 71 пиксель, что влезает в картинку 9×9 на 87% ёмкости. Маленький загрузчик-бутстрап забирает фавиконку, рисует её на canvas, читает пиксели, разбирает длину и рендерит HTML. Автор честно оговаривает: так хранится контент, а не целый сайт, и загрузчик всё ещё нужен.

Тред перебивает его тремя способами

Самый авторитетный ответ пришёл от человека, известного именно этим жанром файловых трюков, и он убрал тот самый загрузчик, который автор считал необходимым:

«Тебе всё ещё нужен крошечный бутстрап-загрузчик, чтобы декодировать картинку. Не-а, всё можно сделать в одном файле через полиглот html/png (а сейчас можно получить и лучшее сжатие на новых форматах вроде webp)». — David Buchanan, исследователь безопасности, известный полиглотами файловых форматов

Дальше пожали плечами те, кто знает стандарт: в PNG уже есть место под текст:

«В PNG есть чанки-комментарии tEXt, zTXt и iTXt. Можно иметь совершенно нормальную картинку, файл которой набит сколь угодно большим контентом». — комментатор о встроенных текстовых чанках PNG

Ещё более простой путь вообще обходил пиксели:

«Вместо возни с пикселями — почему не взять SVG-фавиконку, хранить разметку прямо в ней и оттуда же её извлекать?» — немецкий разработчик, предлагающий SVG-фавиконку

И историческое отрезвление: это сделали четверть века назад, причём с контрабандой:

«Ещё в 2000-м кто-то спрятал deCSS в фавиконке… Чтобы извлечь: dd bs=1 skip=2238 < favicon.ico». — комментатор, вспоминающий прецедент deCSS в фавиконке

Самое интересное — в комментариях

Пост — приятный микрохак, а тред читается лучше: маленький мастер-класс о том, сколькими способами файловый формат умеет проносить данные — от полиглотов, одновременно валидных как HTML и как PNG, до чанков-комментариев, сделанных под эту задачу, до SVG-разметки, которой декодирование вообще не нужно. Фавиконка с deCSS образца 2000-го — идеальная кода: люди прячут нагрузку в крошечных иконках столько, сколько существуют фавиконки. Новизна тут не в трюке, а в том, что кто-то вывел его с нуля и описал чисто настолько, чтобы созвать всех, кто уже знал версии постарше и поострее.

Получайте такие разборы каждый день

Главные истории Hacker News — на email, в Telegram или RSS.

Следующая новость · 25 из 30 Читать дальше
🚀Tech

Из Apple Vision Pro сделали X11-сервер, и тред поставил на то, что X11 переживёт visionOS

UHF X11 учит гарнитуру говорить на протоколе X из 1980-х: каждое приложение Xlib открывается отдельным плавающим пространственным окном — с опциональными строками развёртки CRT и свечением люминофора. Самый смешной комментарий оказался ещё и самым правдоподобным прогнозом о том, какая технология выживет.

★ 174 · 💬 30 · lispm.net · 3 мин