-
Вебмастеру
(
http://forum.oszone.net/forumdisplay.php?f=22)
загрузка файлов на сервер
Скажите, пожалуйста - как правильно файлы на сервер грузить?
Должна ли быть директория загрузки - выше корневого каталога?
Какие права на каталог нужно установить?
Каким образом можно вывести фото в тег img и при этом не позволить злоумышленникам по прямой ссылке файлы доставать?
|
Цитата:
Цитата zvezda_t
Каким образом можно вывести фото в тег img и при этом не позволить злоумышленникам по прямой ссылке файлы доставать? »
|
Защита фото от хотлинкинга - есть много способов =)
Цитата:
Цитата zvezda_t
Должна ли быть директория загрузки - выше корневого каталога? »
|
А зачем вам там файлы? Судя по вопросам, будут грузится изображения - значит можно запретить выполнение скриптов для директории загрузки (а еще лучше - не давать загружать их в своем скрипте) и все будет нормально.
Пример .htaccess для папки с загруженными файлами
Запрет популярных форматов скриптов/html-файлов:
Код:
<FilesMatch "\.([Pp][Hh][Pp]|[Cc][Gg][Ii]|[Pp][Ll]|[Ph][Hh][Tt][Mm][Ll])\.?">
Order allow,deny
Deny from all
</FilesMatch>
Радикальный метод - запрет всего и разрешенные изображения :)
Код:
<FilesMatch ".*">
Order allow,deny
Deny from all
</FilesMatch>
<FilesMatch "\.(jpg|jpeg|gif|png)$|^$">
Order deny,allow
Allow from all
</FilesMatch>
|
Цитата:
Habetdin
, спасибо Вам большое за ответ)
Я немного не точно выразилась. Дело в том, что мне необходимо защитить документы от злоумышленников, не в том смысле - чтоб они их скачать себе не смогли, но чтобы даже и посмотреть не смогли.
То есть, если пользователь авторизовался на сайте - то он получает доступ к просмотру и скачиванию документов, а если пользователь на сайте не авторизовался - он не в коем случае не может ни фото посмотреть, не себе скачать - ничего не должен видеть.
А сейчас у меня так: если пользователь вышел с сайта, но знает путь до документов + название документа - его ничего не остановит от просмотра или скачивания - так как ссылка прямая.
Цитата:
А зачем вам там файлы? Судя по вопросам, будут грузится изображения
Это пока единственное, что я придумала - чтоб запретить прямую ссылку к файлам - без авторизации. Ведь если файлы в директории выше корневой - к ним никак не добраться?
Если не получиться отображать изображения в теге <img> - из директории выше корневой - то придется пожертвовать отображением - ради безопасности. Фото тогда будет выгружаться как и другие документы с помощью функций php.
Вот, надеюсь не запутала Вас? Что посоветуете?
|
zvezda_t, можно тогда полностью "закрыть" папку от просмотра через веб:
Код:
Order allow,deny
Deny from all
А файлы отдавать своим внутренним скриптом, который знает, авторизован ли пользователь. Как я понял,
Пример на PHP (спойлер)
PHP код:
<?php function imDownload($file_path) // функция, отдающая файл $file_path в браузер. при использовании в виде "i.php?img=scr.png" не забывайте фильтровать входящее имя файла, а то можно будет посмотреть не только изображения при наличии авторизации ;) { $file_path = realpath($file_path); $file_info = pathinfo($file_path); switch($file_info['extension']) { case 'gif': $file_mime = 'image/gif'; break; case 'png': $file_mime = 'image/png'; break; case 'jpe': case 'jpeg': case 'jpg': $file_mime = 'image/jpg'; break; default: $file_mime = 'application/octet-stream'; } if(file_exists($file_path)) { // можно раскомментировать следующую строку, если нужно поведение "загружаемого файла" // header('Content-Disposition: attachment; filename='. $file_info['basename']); header('Content-Transfer-Encoding: binary'); header('Content-Length: '. filesize($file_path)); header('Content-Type: '. $file_mime); header('Cache-Control: must-revalidate'); header('Cache-Control: private', false); header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); header('Pragma: no-cache'); ob_clean(); flush(); readfile($file_path); exit(); } else die('No such file'); } // некий пример со статическим именем файла :) if($auth) imDownload('private_folder/Image_2013-10-03_003.png'); // если есть авторизация - отдаем юзеру файл
Реальный путь до файла при этом не будет выдан - пользователь увидит адрес скрипта. И даже с известным путем нельзя будет скачать файл без доступа к серверу, папка то закрыта для просмотра через web ;)
|
Спасибо.
Почитала по ссылке. Вы же про эту статью - да?
Можно не только файлы фото так прятать - но и любые файлы - Да?
Я только не поняла - как туда зависимость от авторизации прикрутить? Или это не та ссылка?
Вот, например, сейчас у меня доки в папке:
http://my_site.ru/clients/1/ivanov.doc
Если авторизованный или не авторизованный пользователь, пробует зайти так:
http://my_site.ru/clients/1/
Выходит ошибка:
Цитата:
404 Page Not Found
The page you requested was not found.
|
Это хорошо)
А если пользователь вышел из системы и нажимает:
http://my_site.ru/clients/1/ivanov.doc
- то никаких запретов нет - скачивай пожалуйста (((
|
Защита от хотлинкинга - это защита от встраивания ваших изображений на чужих сайтах. Думал в начале темы о том, что вам нужно именно это.
Цитата:
Цитата zvezda_t
зависимость от авторизации прикрутить? »
|
Выдавайте файл скриптом, а не прямую ссылку на файл. А папку с файлами закройте от просмотра через веб, с помощью .htaccess из 4 поста.
|
Цитата:
Цитата Habetdin
Выдавайте файл скриптом, а не прямую ссылку на файл. »
|
Спасибо, я так и хочу!
Цитата:
Цитата Habetdin
А файлы отдавать своим внутренним скриптом, который знает, авторизован ли пользователь. Пример на php:
читать дальше » »
|
Что это за пример на php? Отправьте, пожалуйста еще раз ссылку - эта не та.
|
Время: 08:23.
© OSzone.net 2001-