Blog. Just Blog

Быстрый поиск

Введите фрагмент названия статьи для поиска

Получение реального формата изображения

08.04.2019 | Категория: Web-мастеру и не только | Автор: ManHunter
Одно из основных правил при разработке web-приложений - не доверять никаким данным, полученным от пользователя. Они могут быть перепутаны случайно, но могут быть специально модифицированы в злонамеренных целях. Это касается в том числе и загружаемых изображений. Чтобы применять к ним функции типа ImageCreateFromXXX, просто ориентироваться на расширение файла недостаточно, оно запросто может не соответствовать содержимому. Для определения реального типа изображения я всегда проверяю внутренний формат файла, его служебные заголовки, и только на основании этого принимаю решение, как обрабатывать этот файл. Для этого у меня написана вот такая функция:
  1. //-------------------------------------------------------------------
  2. // Функция получения реального формата изображения
  3. // (C) ManHunter / PCL
  4. // https://www.manhunter.ru
  5. //-------------------------------------------------------------------
  6. function get_real_image_type($file_path) {
  7.   // По умолчанию файл имеет неизвестный формат
  8.   $type=false;
  9.  
  10.   // Анализ по внутренней структуре файла
  11.   if ($f=fopen($file_path,'r')) {
  12.     $data=fread($f,20);
  13.     fclose($f);
  14.     // Заголовок файла GIF
  15.     if (substr($data,0,3)=='GIF'
  16.       && (substr($data,12,1)=="\x00" 
  17.       || substr($data,12,1)=="\x01")) {
  18.       // Проверка на классические сплойты
  19.       if (strpos(substr($data,6,4),'/*')!==false 
  20.         || strpos(substr($data,6,4),'//')!==false) {
  21.         $type=false;
  22.       }
  23.       else {
  24.         // Проверка на более хитрые сплойты
  25.         $tmp=preg_replace('/[^\("\']/','',substr($data,6,4));
  26.         if ($tmp=='("' || $tmp=='(\'') {
  27.           $type=false;
  28.         }
  29.         else {
  30.           $type='gif';
  31.         }
  32.       }
  33.     }
  34.     // Заголовок файла PNG
  35.     elseif (substr($data,0,8)==chr(137).'PNG'.chr(13).chr(10).chr(26).chr(10)) {
  36.       $type='png';
  37.     }
  38.     // Заголовок файла JPEG
  39.     elseif (substr($data,0,3)==chr(255).chr(216).chr(255)) {
  40.       $type='jpg';
  41.     }
  42.     // Заголовок файла BMP
  43.     elseif (substr($data,0,2)=='BM') {
  44.       $type='bmp';
  45.     }
  46.     // Заголовок файла WebP
  47.     elseif (substr($data,0,4)=='RIFF' && substr($data,8,4)=='WEBP') {
  48.       $type='webp';
  49.     }
  50.   }
  51.   return $type;
  52. }
Единственный параметр $file_path - путь к проверяемому файлу. На выходе строка с реальным типом изображения или false, если файл не является изображением.

Кроме определения типа изображения функция также проверяет GIF-файлы на наличие в них вредоносного кода. Из всех эксплойтов, которые я встречал внедренными в гифки, не прошел ни один. Если вдруг найдете образец зловреда, который не обнаруживается этой функцией, то пришлите его мне, пожалуйста, я с удовольствием доработаю проверку.

Просмотров: 1580 | Комментариев: 6

Рамка для фото в виде смартфона

25.11.2018 | Категория: Web-мастеру и не только | Автор: ManHunter

Рамка для фото в виде смартфона

Для одной презентации понадобилось достаточно большое количество картинок, на которых представлены скриншоты мобильной версии продукта. С самими картинками проблем не возникло, нащелкали на смартфонах сколько надо скриншотов. Согласно поставленной задаче, для пущей убедительности картинки должны быть, так сказать, "в интерьере", то есть как будто отрисованные на экране смартфонов. Конечно, фотошоп никто не отменял, можно было заморочиться и наделать все ручками, но программистское мышление взяло вверх. Как верно подметил герой одного старого мультика, "лучше день потерять, зато потом за пять минут долететь".

Читать статью целиком »
Просмотров: 3015 | Комментариев: 4

Растягивание фона изображения на PHP

11.10.2018 | Категория: Web-мастеру и не только | Автор: ManHunter

Растягивание фона изображения на PHP

Чтобы не таскать с собой кучу пластиковых карточек, я пользуюсь программой на смартфоне, куда их все можно легко добавить. Для предустановленных брендов в программе есть свои логотипы, для отсутствующих можно загрузить какие-нибудь свои. Все хорошо и удобно, но речь сегодня не об этом. При загрузке логотипа программа пытается автоматически заполнить подложку фоновым цветом, который определяется из цвета загружаемого изображения. И вот это действие меня заинтересовало.

Читать статью целиком »
Просмотров: 2067 | Комментариев: 0

Исследование защиты программы Ximagic Denoiser

18.08.2018 | Категория: Темная сторона Силы | Автор: ManHunter

Скриншот программы Ximagic Denoiser

Ximagic Denoiser - очень неплохой плагин для подавления цифрового шума на фотографиях. Изначально разработан для использования с Adobe Photoshop, но также работает с любыми программами, которые этот формат поддерживают. Плагин давно не обновлялся, но это не мешает ему работать даже с самыми новыми версиями графических редакторов. В незарегистрированной версии есть ограничение по времени работы и невозможность использовать плагин в пакетном режиме. Есть предложение исправить эту досадную оплошность разработчика.

Читать статью целиком »
Просмотров: 3030 | Комментариев: 11

Сравнение изображений на PHP

03.08.2018 | Категория: Web-мастеру и не только | Автор: ManHunter

Сравнение изображений на PHP

На работе возникла интересная задача. В базе имеются объекты, к каждому из которых привязано некоторое количество изображений. Проблема в том, что некоторые изображения дублируются, т.к. одно и то же исходное изображение было подгружено к объекту несколько раз. Дополнительная сложность заключается в том, что дубли могут отличаться по времени загрузки, а также быть в разном формате и с разным сжатием. То есть визуально их можно считать идентичными, а файлы по своим параметрам абсолютно разные. Объектов и изображений достаточно много, просмотреть каждый и обработать вручную нереально. Задача заключалась в автоматизации этого процесса.

Читать статью целиком »
Просмотров: 4772 | Комментариев: 7

01 ... 08 09 10 11 12 13 14 ... 25
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2026
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.08 сек. / MySQL: 3 (0.0072 сек.) / Память: 4.5 Mb
Наверх