Показать полную графическую версию : [решено] загрузка файлов на сервер
zvezda_t
12-11-2013, 08:02
Скажите, пожалуйста - как правильно файлы на сервер грузить?
Должна ли быть директория загрузки - выше корневого каталога?
Какие права на каталог нужно установить?
Каким образом можно вывести фото в тег img и при этом не позволить злоумышленникам по прямой ссылке файлы доставать?
Habetdin
12-11-2013, 21:26
Каким образом можно вывести фото в тег img и при этом не позволить злоумышленникам по прямой ссылке файлы доставать? »
Защита фото от хотлинкинга (https://www.google.ru/search?q=%D0%B7%D0%B0%D1%89%D0%B8%D1%82%D0%B0+%D1%84%D0%BE%D1%82%D0%BE+%D0%BE%D1%82+%D1%85%D0%BE%D1% 82%D0%BB%D0%B8%D0%BD%D0%BA%D0%B8%D0%BD%D0%B3%D0%B0) - есть много способов =)
Должна ли быть директория загрузки - выше корневого каталога? »
А зачем вам там файлы? Судя по вопросам, будут грузится изображения - значит можно запретить выполнение скриптов для директории загрузки (а еще лучше - не давать загружать их в своем скрипте) и все будет нормально.
Запрет популярных форматов скриптов/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>
zvezda_t
13-11-2013, 07:33
Цитата:
Habetdin
, спасибо Вам большое за ответ)
Я немного не точно выразилась. Дело в том, что мне необходимо защитить документы от злоумышленников, не в том смысле - чтоб они их скачать себе не смогли, но чтобы даже и посмотреть не смогли.
То есть, если пользователь авторизовался на сайте - то он получает доступ к просмотру и скачиванию документов, а если пользователь на сайте не авторизовался - он не в коем случае не может ни фото посмотреть, не себе скачать - ничего не должен видеть.
А сейчас у меня так: если пользователь вышел с сайта, но знает путь до документов + название документа - его ничего не остановит от просмотра или скачивания - так как ссылка прямая.
Цитата:
А зачем вам там файлы? Судя по вопросам, будут грузится изображения
Это пока единственное, что я придумала - чтоб запретить прямую ссылку к файлам - без авторизации. Ведь если файлы в директории выше корневой - к ним никак не добраться?
Если не получиться отображать изображения в теге <img> - из директории выше корневой - то придется пожертвовать отображением - ради безопасности. Фото тогда будет выгружаться как и другие документы с помощью функций php.
Вот, надеюсь не запутала Вас? Что посоветуете?
Habetdin
14-11-2013, 01:05
zvezda_t, можно тогда полностью "закрыть" папку от просмотра через веб:
Order allow,deny
Deny from all
А файлы отдавать своим внутренним скриптом, который знает, авторизован ли пользователь. Как я понял,
с помощью функций 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 ;)
zvezda_t
14-11-2013, 10:03
Спасибо.
Почитала по ссылке. Вы же про эту статью (http://4remind.ru/wordpress/bezopasnost/zashhita-saita-ot-hotlinkinga.html) - да?
Можно не только файлы фото так прятать - но и любые файлы - Да?
Я только не поняла - как туда зависимость от авторизации прикрутить? Или это не та ссылка?
Вот, например, сейчас у меня доки в папке:
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
- то никаких запретов нет - скачивай пожалуйста (((
Habetdin
15-11-2013, 02:50
Или это не та ссылка? »
Защита от хотлинкинга - это защита от встраивания ваших изображений на чужих сайтах. Думал в начале темы о том, что вам нужно именно это.
зависимость от авторизации прикрутить? »
Выдавайте файл скриптом, а не прямую ссылку на файл. А папку с файлами закройте от просмотра через веб, с помощью .htaccess из 4 поста.
zvezda_t
15-11-2013, 08:00
Выдавайте файл скриптом, а не прямую ссылку на файл. »
Спасибо, я так и хочу!
А файлы отдавать своим внутренним скриптом, который знает, авторизован ли пользователь. Пример на php:
читать дальше » »
Что это за пример на php? Отправьте, пожалуйста еще раз ссылку - эта не та.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.