лучший способ определить, является ли URL изображением в PHP

@gowtham rajan является правильным, основываясь на этом ответе , вы можете использовать простой встроенный плагин для выполнения работы:

{
  beforeInit: function(chart, options) {
    chart.legend.afterFit = function() {
      this.height += 100; // must use `function` and not => because of `this`
    };
  }
}

См. Этот stackblitz пример

53
задан danio 24 March 2009 в 02:26
поделиться

2 ответа

Вы могли использовать запрос ГОЛОВЫ HTTP и проверить тип контента. Это могло бы быть хорошим компромиссом. Это может быть сделано с помощью Потоков PHP. Фарлонг Wez имеет статью, которая показывает, как использовать этот подход для отправления запросов сообщения, но это может быть легко адаптировано для отправления ГЛАВНЫХ запросов вместо этого. Можно получить заголовки от http ответа с помощью stream_get_meta_data ().

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

28
ответ дан Emil H 7 November 2019 в 08:48
поделиться

Существует несколько разных подходов.

  • Осуществите сниффинг содержания путем поиска магического числа в начале файла. Например, GIF использует GIF87 или GIF89 как первые пять байтов файла (в ASCII). К сожалению, это не может сказать Вам, если существует ошибка в изображении или если изображение содержит злонамеренное содержание. Вот некоторые магические числа для различных типов файлов изображений (не стесняйтесь использовать их):

    "\xff\xd8\xff" => 'image/jpeg',
    "\x89PNG\x0d\x0a\x1a\x0a" => 'image/png',
    "II*\x00" => 'image/tiff',
    "MM\x00*" => 'image/tiff',
    "\x00\x00\x01\x00" => 'image/ico',
    "\x00\x00\x02\x00" => 'image/ico',
    "GIF89a" => 'image/gif',
    "GIF87a" => 'image/gif',
    "BM" => 'image/bmp',
    

    Сниффинг содержания как это, вероятно, собирается соответствовать Вашим требованиям лучше всего; необходимо будет только читать и поэтому загрузить первые несколько байтов файла (мимо заголовка).

  • Загрузите изображение, пользующееся библиотекой GD, чтобы видеть, загружается ли это без ошибки. Это может сказать Вам, если изображение действительно без ошибки или нет. К сожалению, это, вероятно, не соответствует Вашим требованиям, потому что это требует загрузки полного образа.

  • Если Вы действительно не хотите делать Запрос HTTP для изображения вообще, то это исключает и осуществляющие сниффинг и добирающиеся HTTP-заголовки. Можно, однако, попытаться определить, является ли что-то изображением контекстом, в котором оно связано. Что-то связало использование атрибута src в <img, элемент является почти наверняка изображением (или попытка XSS, но это - другая история). Это скажет Вам, если что-то будет предназначено как изображение. Это не скажет Вам, на самом деле ли изображение доступно, или действительно; необходимо будет выбрать, по крайней мере, первую небольшую часть (заголовок или магическое число) URL изображения для нахождения этого.

К сожалению, для файла возможно быть оба действительным изображением, а также zip-файлом, содержащим вредное содержание, которое могло быть выполнено, поскольку Java вредным сайтом - видит использование GIFAR. Можно почти наверняка предотвратить эту уязвимость путем загрузки изображения в библиотеке как GD и выполнения некоторого нетривиального фильтра на нем, как смягчение или увеличение резкости его крошечная сумма (т.е. использование фильтра свертки) и сохранение его в новый файл, не передавая метаданных через.

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

13
ответ дан thomasrutter 7 November 2019 в 08:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: