безопасная обработка удаленных «горячих» изображений - PullRequest
4 голосов
/ 29 марта 2012

Мне нужно разрешить пользователям сайта предоставлять удаленные изображения с «горячей ссылкой».

Я понимаю, что это немного опасно, поэтому вот процедура в настоящее время:

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

2) выполнить запрос скручивания для заголовков изображений, как описано здесь: Как можно проверить, существует ли удаленный файл с использованием PHP? и убедиться, что он имеет действительный тип пантомимы png или jpg и код возврата HTTP 200.

3) убедитесь, что имя файла и расширение (из pathinfo выше) является допустимым файлом png или jpg (я не принимаю GIF-файлы и т. Д.)

4) наконец, сохранить данные пути изображения в нескольких столбцах в БД (экранирование данных)

Я что-то упустил? Есть ли еще какая-то опасность? Я подумал, что, возможно, мне следует снова выполнить функцию скручивания на дисплее, чтобы убедиться, что изображение все еще там и что оно все еще изображение.

Спасибо за любой совет.

1 Ответ

1 голос
/ 29 марта 2012

Удостоверьтесь, что это не осел порно?

... Серьезно, единственное, о чем я могу подумать, это если это скрипт / exe / bin, который выводит изображение на экран (например, PHP / GD), но делает что-то еще в фоновом режимеtime.

Например, CAPTCHA выводит изображение, но может сохранить «правильный ответ» в сеансе в одно и то же время (за кадром), просто вызвав <img src="/img/captcha.php" ... />.

Нет причин, по которым mod_rewrite нельзя было бы использовать для вызова того же PHP-скрипта с <img src="/img/captcha.jpg" ... />.Заголовки HTTP могут быть настроены так, чтобы сообщать тип MIME как «image / jpg» с ответом 200.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...