Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Запрет закачки файла по прямой ссылке.
 
 автор: Николай Законов   (09.08.2006 в 18:42)   письмо автору
 
 

Помогите, пожалуйста, закрыть доступ к папке и файлам предназначенным для продажи.
Т.е. их можно скачивать только через скрипт магазина, но разработчики настолько сыро собрали магазин, что просто прописав путь до файла, он скачивается.

Средствами Apache .htaccess не удалось корректно закрыть доступ: выходит что и я не могу скачать и скрипт не может. Да там и скрипт-то в две строчки, намудрили, а не защитили.

Может кто поможет написать прямо кодом php файл отвечающий за конфиденциальную скачку файлов.

Я подглядел в Shop-Script - там у них применяется 64 битное кодирование самого файла для закачки, по-моему.

Вот как мне это организовать бы.

   
 
 автор: Николай Законов   (09.08.2006 в 23:12)   письмо автору
 
   для: Николай Законов   (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" - загрузка силой.

   
 
 автор: Igorel   (10.08.2006 в 00:36)   письмо автору
 
   для: Николай Законов   (09.08.2006 в 23:12)
 

т.е. они сами сделали чтот б народ мог скачать ? или я чего-то не так понял

   
 
 автор: Николай Законов   (10.08.2006 в 09:50)   письмо автору
 
   для: 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);
Заголовки только для того, чтобы браузер корректно сохранил файл.

   
 
 автор: Николай Законов   (10.08.2006 в 18:25)   письмо автору
 
   для: glsv   (10.08.2006 в 11:48)
 

Я точно так и подумал сначала: копировать а потом удалять из временной директории.

Я же сделал так:
- закрыл доступ к папке "Deny from all", и теперь никак туда не пробиться.
- установил заголовки в скрипте download.php и только он может брать файлы теперь.

Может я упустил чего, может дыра еще существует? Если есть соображения, то жду...

   
 
 автор: cheops   (10.08.2006 в 18:31)   письмо автору
 
   для: Николай Законов   (10.08.2006 в 18:25)
 

Вы поступили правильно, я бы тоже так делал.

   
 
 автор: Igorel   (10.08.2006 в 18:34)   письмо автору
 
   для: cheops   (10.08.2006 в 18:31)
 

Товарищи, а раскажите поподробней про заголовки скрипта (ов).

   
 
 автор: cheops   (11.08.2006 в 00:38)   письмо автору
 
   для: Igorel   (10.08.2006 в 18:34)
 

Возможно вас заинтересует тема по ссылке http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=7073.

   
 
 автор: Igorel   (11.08.2006 в 00:45)   письмо автору
 
   для: cheops   (11.08.2006 в 00:38)
 

Спасибо.

   
 
 автор: glsv (Дизайнер)   (11.08.2006 в 06:04)   письмо автору
 
   для: Николай Законов   (10.08.2006 в 18:25)
 

>Я точно так и подумал сначала:
>Я же сделал так:
Я имел ввиду, что лучше совместить оба этих способа

В принципе, того что Вы сделали хватит. Но есть такое соображение: Если данные коммерчески ценные, то злоумышленник может поставить себе задачу украсть файлы и будет искать лазейки.
Предположим, что он найдет дыру в другом подобном скрипте (вдруг такой существует или появится в дальнейшем) и сможет через него закачать файл (путь к нему он уже знает). Если же он не знает местоположение файла, то и задача злоумышленнику осложняется.

   
 
 автор: Николай Законов   (11.08.2006 в 11:29)   письмо автору
 
   для: glsv (Дизайнер)   (11.08.2006 в 06:04)
 

Да, я пробовал кодировать через 64 битовое кодирование, сохраняя код в базе.
А потом при закачке декодировал путь в нормальный, но не выпускал его за пределы скрипта, что делает более неуязвимым сам файл.

Спасибо всем, что поддержали тему, на душе отлегло: хоть продажу сделал :-)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования