2012-03-29 2 views
4

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

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

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

2) выполнить запрос на завивку для заголовков изображений, как описано здесь: How can one check to see if a remote file exists using PHP? и убедиться, что у него есть действительный тип mime png или jpg и код возврата HTTP 200.

3) убедитесь, что имя файла и расширение (из приведенного выше Pathinfo) является допустимым PNG или JPG-файл (я не принимать гифы и т.д.)

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

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

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

+0

Если вы хотите быть еще умнее, вы можете попробовать получить фактические данные, а затем попытаться создать объект изображения в PHP. Однако что бы вы ни делали в этот момент, это не помешает кому-то помещать правильное изображение на удаленный сервер, предоставляя вам URL-адрес, а затем меняя это изображение на что-то злонамеренное. –

+0

@AleksG - да, это проблема, и почему я думаю, что лучше всего сделать завиток на дисплее, а также сохранить. Тем не менее, это почти побеждает цель предоставления удаленных изображений (так как я получаю полосу пропускания, а также попадание в хранилище, даже если временно) – julio

+0

Почему вы все равно хотите сделать это? Какие риски вы боитесь, когда путь не будет проверен? – Gumbo

ответ

1

Убедитесь, что он не осел порно?

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

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

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

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

+0

lol-- porn - это наименьшее из моих забот. Если это просто оскорбительный образ, с которым можно справиться. Я больше интересуюсь XSS, вредоносным ПО и т. Д. Спасибо за идею re: тип установки CGI. – julio

Смежные вопросы