Можно ли напрямую связываться с изображением для изображений, загружаемых на сервер с помощью специального сценария PHP? - PullRequest
1 голос
/ 02 июня 2010

Для файла изображения (JPEG), который был загружен на сервер с помощью сценария PHP (в каталог, такой как http://www.somedomain.com/images, целесообразно ли разрешить клиенту получить прямой адрес изображения (например, http://www.somedomain.com/images/someimage.jpg и вставьте его в текстовый редактор WYWSIWYG (например, TinyMCE)?

Мне интересно, есть ли предпочтительный метод, где прямой адрес зашифрован?

Пожалуйста, если мне нужно просто дать ссылку на изображение, просто скажите.

Спасибо!

Примечание: Я изменил этот вопрос из своего оригинала. Пожалуйста, смотрите исправления, если вам интересно, но я думаю, что я задавал вопрос неправильно. Приношу свои извинения людям, которые уже ответили.

Ответы [ 5 ]

2 голосов
/ 04 июня 2010

Пока вы проверяете правильно, ЧТО загружается, это не должно быть проблемой. Поэтому, по крайней мере, используйте getimagesize или аналогичную функцию, чтобы убедиться, что загружается изображение, и убедитесь, что расширение файла правильно, чтобы оно никогда не запускалось через интерпретатор PHP - чтобы не дать кому-то загрузить изображение с прикрепленным PHP-скриптом.

Кстати, вот хороший документ о загрузке и безопасности: http://www.scanit.be/uploads/php-file-upload.pdf

1 голос
/ 02 июня 2010

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

Вот некоторый очень базовый код, для XSS / etc его нужно обработать и очистить ...

<?php
$basePath = "/path/to/my/image/store/not/web/accessible/";
$file = NULL;
if (isset($_GET['file']))
  $file = $_GET['file'];

if ($file != NULL)
{
   $path = $basePath . $file; 
   // $file needs to be checked for people 
   // trying to hack you, but for the sake of simplicity
   // i've left it out

   $mime = mime_content_type($path);
   $size = filesize($path);
   header("Content-Length: " . $size);
   header("Content-Type: " . $mime);
   header('Expires: 0');
   readfile($path); // Outputs the file to the output buffer
}
?>

Очевидно, что вы можете поставить здесь любые проверки безопасности, какие захотите. Но таким образом ваши файлы находятся ниже веб-каталога, и вы можете применить логику для их доступности. Это , обычно используется больше для ФАЙЛА против Изображений, но вы можете сделать то же самое здесь.

Изображения, доступные как это

http://www.mysite.com/image.php?file=hello.jpg

И вы можете использовать mod_rewrite, чтобы переписать URL-адреса следующим образом:

`http://www.mysite.com/images/hello.jpg

В первый URL.

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

0 голосов
/ 04 июня 2010

Разве вы не получили свой ответ?
Каждый сайт показывает местоположение изображения в браузере. Это просто, как работает веб.

У вас есть причина "зашифровать" исходное местоположение?

0 голосов
/ 02 июня 2010

почему вы беспокоитесь о том, чтобы раскрыть местоположение вашего изображения. Хотлинкинг? если это так, вы можете предотвратить хотлинкинг с помощью htaccess

http://altlab.com/htaccess_tutorial.html

0 голосов
/ 02 июня 2010

Wordpress использует прямые ссылки на изображения. Функция постоянной ссылки просто помещает изображение на страницу вместе с метаданными для комментариев, но атрибуты SRC изображений по-прежнему связаны непосредственно с изображением.

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