Новый пример из серии трюков по «обману» браузера.
Вот эта страница одновременно является и HTML-документом, и изображением JPEG, которое можно внедрять через тег <img>.
Другими словами, на неё можно ссылаться двумя способами:
<a href="http://lcamtuf.coredump.cx/squirrel/">Первый способ</a>
или
<img src="http://lcamtuf.coredump.cx/squirrel/">
Если посмотреть исходный код страницы, то можно увидеть, что это на самом деле файл JPEG, в который добавлен комментарий и изменено расширение, чтобы браузер воспринимал его как документ HTML, но в то же время движок рендеринга по-прежнему видит JPEG.
Подобные трюки были и раньше. Например, недавно демонстрировался способ упаковки исполняемого кода в формат PNG, где файл PNG изначально воспринимается браузером как HTML-документ (из-за своего расширения .html), далее он загружает содержимое в тег <img>, заставляя интерпретировать его как PNG. После этого браузер передаёт «изображение» для рендеринга в canvas
, и тогда извлекается и запускается на исполнение JS-код, встроенный в PNG.
Вот некоторые другие примеры:
Тот же Squirrel, но с исполнением скрипта: https://dl.dropbox.com/u/131649/squirrel.html
Matraka: http://www.p01.org/releases/MATRAKA/matraka.png.html
Анализ Matraka: https://gist.github.com/3039247
Формат GIFAR: http://en.wikipedia.org/wiki/GIFAR