Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > безопасный вывод картинки из php


Автор: Chewits 9.10.2009, 22:48
Сделать нужно так - php-файлу через get-запрос передается относительный путь до картинки, он эту картинку просто должен вывести.
Всвязи с тем что недоброжелатили могут написать вместо пути до картинки вообще что Бог на душу положит, начиная от игр с кавычками и заканчивая яваскриптами, а может и не заканчивая.. вообщем не знаю сколько всего можно придумать чтобы навредить.
Меня собственно интересует, какие вообще есть еще варианты для взлома и как от этого всего правильно защищаться?

Автор: nerezus 9.10.2009, 23:01
Что?
У тебя пхп-файл отдает картинку?
Зачем? o_O

Автор: Chewits 10.10.2009, 00:06
ну он отдает html-страницу с картинкой, ну например туда еще можно кнопку закрытия картинки в эту страницу вставить, можно эту страницу отобразить будет как слой на другой странице.. ну чтобы красиво все было..

Автор: brother79 10.10.2009, 03:56
Проверяй, чтобы картинка была только с твоего сайта, и там ничего опасного не будет, хотя смысл задачи не понятен

Автор: nerezus 10.10.2009, 07:38
Давай ты внятно скажешь задачу. а мы скажем, как ее правильно решить.

Автор: Chewits 11.10.2009, 18:11
На сайте есть статьи, в статьях иллюстрации - уменьшенные копии картинок, чтобы открыть картинки во всю величину, нужно щелкнуть по этим уменьшенным копиям. Я не хочу делать так:
<a href="big_photo.jpg"><img src="small_photo.jpg" alt="" /></a>
потому-что хочу иметь расширенные возможности для отображения картинки (например, я хочу, чтобы картинка отображалась на html-странице с черным фоном или методами gd lib её разукрасить "на лету" - поместить на неё, допустим, эмблему сайта). Поэтому я делаю так:
<a href="show_img.php?src=big_photo.jpg"><img src="small_photo.jpg" alt="" /></a>
Скрипт show_img.php занимаестя выводом html-странице, на которой картинка моя будет отображена в виде:
echo '<img src="'.$_GET['src'].'" alt="" />';
Я спрашивал какие опасности и как их нейтрализовать. то есть если я напишу if (file_exists("http://мой_сайт/".$_GET['src'])), этого будет достаточно?

Автор: Ипатьев 11.10.2009, 18:20
Это просто не сработает.

А сама затея не имеет смысла. Рисование на лету - это гарантированное средство задосить свой собственный сайт. 

Автор: Chewits 11.10.2009, 18:35
рисовать на лету пока и не надо, надо чтобы картинка по центру страницы отображалась и кнопка закрыть около неё была

Автор: capitan 11.10.2009, 18:45
Chewits, Вы реально пишите
Код

if (file_exists("http://мой_сайт/".$_GET['src']))
 ?

я про http://

Автор: nerezus 11.10.2009, 18:52
Chewits, как минимум ты не различаешь пути в вебе и пути на файловой системе. Либо неверно строишь задачу.
Когда берешь картинку - то делай на ней лого и бросай ее в images/md5(rand(...). time()).jpeg, туда же и предпросмотр.

Если картинок будет > 10k, то структуру каталога делай многоуровневой 

Автор: Ипатьев 11.10.2009, 19:04
file_exists, только аргументом передавать имя файла, а не URL

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)