|
|
|
| Помогите, пожалуйста, закрыть доступ к папке и файлам предназначенным для продажи.
Т.е. их можно скачивать только через скрипт магазина, но разработчики настолько сыро собрали магазин, что просто прописав путь до файла, он скачивается.
Средствами Apache .htaccess не удалось корректно закрыть доступ: выходит что и я не могу скачать и скрипт не может. Да там и скрипт-то в две строчки, намудрили, а не защитили.
Может кто поможет написать прямо кодом php файл отвечающий за конфиденциальную скачку файлов.
Я подглядел в Shop-Script - там у них применяется 64 битное кодирование самого файла для закачки, по-моему.
Вот как мне это организовать бы. | |
|
|
|
|
|
|
|
для: Николай Законов
(09.08.2006 в 18:42)
| | Все, нашел решение, выкладываю на публику.
header('Content-type: application/force-download');
header('Content-Transfer-Encoding: Binary');
header('Content-length: '.filesize($file));
header('Content-disposition: attachment; filename='.basename($file) );
readfile($file);
Эти заголовки вместе отправляют файл пользователю, не смотря на запрещающие CHMOD.
Ключевой является фраза "force-download" - загрузка силой. | |
|
|
|
|
|
|
|
для: Николай Законов
(09.08.2006 в 23:12)
| | т.е. они сами сделали чтот б народ мог скачать ? или я чего-то не так понял | |
|
|
|
|
|
|
|
для: Igorel
(10.08.2006 в 00:36)
| | Т.е. закрыв доступ к папке с файлами средствами CHMOD или .htaccess мы не допускаем к ним всех посторонних. А эти вышеуказанные заголовки позвляют скачивать файл только средствами скрипта.
А там уж сам решай за что предоставлять доступ: за деньги, за услуги, за те же файлы. | |
|
|
|
|
автор: glsv (10.08.2006 в 11:46) |
|
|
для: Николай Законов
(10.08.2006 в 09:50)
| | Хм... только раз файлы отдаете через скрипт лучше спрячьте пути к файлу - они же, как я понимаю, свободны для просмотра посетителем (пути). Например, пути храните в базе. При попытке санкционированной попытке скачать файл копируете его во временную директорию и уже из этой директории отдаете пользователю. После загрузки через некоторое время удаляете файл из временной директории.
Это имеет смысл делать если файлы собираетесь за деньги продавать. | |
|
|
|
|
автор: glsv (10.08.2006 в 11:48) |
|
|
для: Николай Законов
(10.08.2006 в 09:50)
| | >А эти вышеуказанные заголовки позвляют скачивать файл только средствами скрипта.
В плане защиты здесь дело, скорее, не в заголовках, а в функции readfile($file);
Заголовки только для того, чтобы браузер корректно сохранил файл. | |
|
|
|
|
|
|
|
для: glsv
(10.08.2006 в 11:48)
| | Я точно так и подумал сначала: копировать а потом удалять из временной директории.
Я же сделал так:
- закрыл доступ к папке "Deny from all", и теперь никак туда не пробиться.
- установил заголовки в скрипте download.php и только он может брать файлы теперь.
Может я упустил чего, может дыра еще существует? Если есть соображения, то жду... | |
|
|
|
|
|
|
|
для: Николай Законов
(10.08.2006 в 18:25)
| | Вы поступили правильно, я бы тоже так делал. | |
|
|
|
|
|
|
|
для: cheops
(10.08.2006 в 18:31)
| | Товарищи, а раскажите поподробней про заголовки скрипта (ов). | |
|
|
|
|
|
|
|
|
для: cheops
(11.08.2006 в 00:38)
| | Спасибо. | |
|
|
|
|
|
|
|
для: Николай Законов
(10.08.2006 в 18:25)
| | >Я точно так и подумал сначала:
>Я же сделал так:
Я имел ввиду, что лучше совместить оба этих способа
В принципе, того что Вы сделали хватит. Но есть такое соображение: Если данные коммерчески ценные, то злоумышленник может поставить себе задачу украсть файлы и будет искать лазейки.
Предположим, что он найдет дыру в другом подобном скрипте (вдруг такой существует или появится в дальнейшем) и сможет через него закачать файл (путь к нему он уже знает). Если же он не знает местоположение файла, то и задача злоумышленнику осложняется. | |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(11.08.2006 в 06:04)
| | Да, я пробовал кодировать через 64 битовое кодирование, сохраняя код в базе.
А потом при закачке декодировал путь в нормальный, но не выпускал его за пределы скрипта, что делает более неуязвимым сам файл.
Спасибо всем, что поддержали тему, на душе отлегло: хоть продажу сделал :-) | |
|
|
|