kasual 0 Опубликовано: 25 мая 2008 Рассказать Опубликовано: 25 мая 2008 Возник такой вопрос, есть файлы находящиеся к примеру в папке www.сайт.домен/фтп/тут мои файлы. Добавляя в новость линки на скачивание я имею: www.сайт.домен/фтп/файл И если юзер скопирует мою ссылку и просто передаст другому или вставит себе на сайт, то все смогут это скачать. Каким образом возможно реализовать чтоб ссылки генерировались индивидуально каждому юзеру и жили к примеру всего 1-н день. Цитата Ссылка на сообщение Поделиться на других сайтах
wawilon 0 Опубликовано: 25 мая 2008 Рассказать Опубликовано: 25 мая 2008 Для этого заводится отдельный скрипт который будет выдавать все файлы. Пусть это будет download.php Сначала где то в другом скрипте (ну напрмер если эти файлы оплачиваются, то в скрипте который принял оплату) генерируем ссылку для файла и записываем ее в базу. Например она имеет такой вид: http://some_host/download.php?id=akf35kd5kanxc6m23n6oasi5mdfso3ncv2kg Тогда в базе данных в какой нибудь таблице будет запись, примерно такая URL | link_id ftp/file1.rar | akf35kd5kanxc6m23n6oasi5mdfso3ncv2kg Тогда скрипт download.php извлекает из базы по параметру link_id путь к файлу и выдает его для скачивания. Также необходимо запретить прямое скачивание файлов с сервера. Для этого можно поместить файлы на уровень выше чем корень сайта или другой вариант: с помощью .htaccess запретить доступ к файлам с любого ip кроме 127.0.0.1. Тогда файлы сможет читать лишь сервер. P.S. многие даже очень авторитетные сайты не учитывают последний пункт. В качестве примера - vkontakte.ru Если например человек закрыл от вас просмотр какой либо фотографии, то это не означает что ее нельзя посмотреть. Если знать прямую ссылку на фото, то она успешно откроется. Например ваш друг который имеет доступ к фото, может скинуть вам прямую ссылку и тогда можно смело наплевать на все запреты. Ну разве что коментарий нельзя будет оставить... Цитата Ссылка на сообщение Поделиться на других сайтах
lifestar 18 Опубликовано: 25 мая 2008 Рассказать Опубликовано: 25 мая 2008 енерируем ссылку для файла и записываем ее в базу.зачем ссылку записывать ,если по условиям она должга быть индивидуальная каждому пользователю, а значит генерироваться на лету. А всё остальное верно.. Цитата Ссылка на сообщение Поделиться на других сайтах
kasual 0 Опубликовано: 25 мая 2008 Рассказать Опубликовано: 25 мая 2008 Автор Да, используем сервис smszamok, поэтому и хотим защитить линки. В этом я особо не силен, поэтому не очень понял. Возможно есть какие либо готовые решения, которые бы было возможно использовать? Ссылки для оплаты мы скрываем в тегах [hide] Хотя саму идею предложенную Вами я понял, но как это реализовать я не понимаю. Цитата Ссылка на сообщение Поделиться на других сайтах
wawilon 0 Опубликовано: 25 мая 2008 Рассказать Опубликовано: 25 мая 2008 (изменено) Так ясное дело при генерации проверяем чтобы она не совпала с другими (уже имеющимися). Чтобы ссылка работала для определенного пользователя в базу допишем id этого юзера. Скрипт тогда будет проверять соответствие link_id и user_id одновременно. То есть если такой то юзер и мы обращаемся по такой то ссылке, то тогда нам дадут скачать файл. Я делал так: генерируем и смотрим есть ли уже такая. Если нет, то генерируем новую и опять проверяем. Но на самом деле если файлов не так много (скажем пару тысяч), то совпадение случайных фраз крайне редкое явление. И еще нужно вставить чистку старых ссылок. Я просто опустил эти пункты. Хотел просто показать идею не вдаваясь в подробности Если вы сами не справитесь, то за $$$ я готов помочь с реализацией. О цене договоримся. Изменено 25 мая 2008 пользователем wawilon Цитата Ссылка на сообщение Поделиться на других сайтах
lifestar 18 Опубликовано: 25 мая 2008 Рассказать Опубликовано: 25 мая 2008 Так ясное дело при генерации проверяем чтобы она не совпала с другими (уже имеющимися).смотря какую ссылку генерировать. Если такую... http://files.site.ru/25/4f6fec50282f7956b8.../super_kino.avi - то она даже теоретически будет уникальной 25 - это ID файла 4f6fec50282f7956b8fdbe12bebe4e8f - хэш, уникальный для каждого пользователя и действительный оперделённое время, например сутки super_kino.avi - имя файла а в БД хранится только ключ, длинной скажем 5 символов. как это реализовать я не понимаю.заплати wawilon'у денег и он тебе реализует Цитата Ссылка на сообщение Поделиться на других сайтах
wawilon 0 Опубликовано: 25 мая 2008 Рассказать Опубликовано: 25 мая 2008 lifestar, твоя идея понятна, но зачем нам столько параметров в ссылке? Мы можем обойтись лишь хешем. А по этому хешу получить всю необходимую нам информацию. Ведь для безопасности лучше даже чтобы пользователь ничего не знал о файле, лишь только хеш. Цитата Ссылка на сообщение Поделиться на других сайтах
lifestar 18 Опубликовано: 25 мая 2008 Рассказать Опубликовано: 25 мая 2008 (изменено) Если файлов очень много то поиск в БД по целочисленному ID выполняется быстрее, чем по текстовому полю. Да и вообще выборка по ID для меня считается хорошим тоном)) Ну и потом мы ничего не теряем от этих параметров, имя файла скорее для красоты ссылки конечно - да и человеку понятно если вдруг забыл куда ведёт эта ссылка, это так полезные мелочи. Плюс при неправильном хэше (поддельном), мы вообще не обращаемся к БД - сразу выдаём ошибку. А если хэш правильный - получаем ссылку, прописываем в .htaccess дату и отдаём файл Чтобы ссылка работала для определенного пользователя в базу допишем id этого юзера. Скрипт тогда будет проверять соответствие link_id и user_id одновременно. То есть если такой то юзер и мы обращаемся по такой то ссылке, то тогда нам дадут скачать файл. Я делал так: генерируем и смотрим есть ли уже такая. Если нет, то генерируем новую и опять проверяем. Но на самом деле если файлов не так много (скажем пару тысяч), то совпадение случайных фраз крайне редкое явление. И еще нужно вставить чистку старых ссылок.здесь в принципе нормальный подход, но как то замудрённо, что лишне. Причём я так и не понял - где хранится ссылка для каждого пользователя? Изменено 25 мая 2008 пользователем lifestar Цитата Ссылка на сообщение Поделиться на других сайтах
wawilon 0 Опубликовано: 25 мая 2008 Рассказать Опубликовано: 25 мая 2008 Все ссылки хранятся в отдельной таблице скажем в таком виде: link_id | user_id | file_path 4f6fec50282f7956b8fdbe12bebe4e8f | 15 | files/some_file.mp3 Сама ссылка будет иметь примерно такой вид: http://host/download/4f6fec50282f7956b8fdbe12bebe4e8f Скрипт сделает запрос к базе и извлечет путь к файлу: SELECT file_path ... WHERE user_id = id_залогинившегося_юзера AND link_id = 4f6fec50282f7956b8fdbe12bebe4e8f Путь к файлу знаем. Открываем его, прописываем заголовки и отдаем на скачку. Из твоего поста мне не понятно, что значит "если хеш правильный"? Как ты это определишь не обратившись к базе? И еще что значит "прописываем в .htaccess дату". Что ты хотел этим сказать? здесь в принципе нормальный подход, но как то замудрённо, что лишне. Предложи свой способ генерации случайной уникальной ссылки. Да и еще: Да и вообще выборка по ID для меня считается хорошим тоном)) Этим ты только сказал, что параметр для ссылки должен содержать лишь цифры, а не быть например 4f6fec50282f7956b8fdbe12bebe4e8f. Либо предлагаешь вообще отказаться от случайной строки и ограничиться только лишь ID, но так будет не правильно. Тогда вообще теряется весь смысл случайной строки. Цитата Ссылка на сообщение Поделиться на других сайтах
lifestar 18 Опубликовано: 25 мая 2008 Рассказать Опубликовано: 25 мая 2008 ааа, всё - я понял систему. Твой метод хорош для платного контента где нам надо знать кому разрешено качать, мой вообще как антилич где просто генерируется уникальная ссылка. Как? Да просто - придумываем некую формулу по которой и генерируем, в параметры включить что-нибудь от пользователя (например ID или логин), ID файла, можно время + ключевое слово/фразу. И проверять Если хэш верный, в куки записать что-нибудь + в .htaccess в папке с файлом прописать набор правил из HTTP_REFERER, HTTP_COOKIE, REMOTE_ADDR, TIME_DAY, TIME_HOUR - по выбору. Далее пользователю выдаётся прямая ссылка на файл - качай нехочу) Таким образом для скачивания файла не используем PHP вообще, ибо если это PHP+качаем фильм - жалко сервер А если установлен mod_redirect - жизнь становится ещё проще - тогда и прямая ссылка на файл останется неизвестной! Цитата Ссылка на сообщение Поделиться на других сайтах
wawilon 0 Опубликовано: 25 мая 2008 Рассказать Опубликовано: 25 мая 2008 Ну да. Я понял тебя. В каких-то случаях удобная схема. Только: 1. В уникальную ссылку я бы не стал запихивать дату, поскольку еще придется вспоминать когда мы ее генерировали (то есть придется куда то записать). Иначе эта схема возможна если хеширование не однонаправленное, например все шифруем base64, что не является безопасным. 2. REMOTE_ADDR я бы не стал писать в правила, поскольку IP адрес не является показателем и будет даже лучше если один и тот же пользователь может скачивать файл с другого IP. Особенно в случае динамического IP (например Dial-up модем). 3. Ты точно имел ввиду mod_redirect? может все же mod_rewrite? Если точно, то поясни пожалуйста что делает mod_redirect. И в чем отличие от mod_rewrite? Цитата Ссылка на сообщение Поделиться на других сайтах
lifestar 18 Опубликовано: 25 мая 2008 Рассказать Опубликовано: 25 мая 2008 (изменено) 1. В уникальную ссылку я бы не стал запихивать дату, поскольку еще придется вспоминать когда мы ее генерировали (то есть придется куда то записать). Иначе эта схема возможна если хеширование не однонаправленное, например все шифруем base64, что не является безопасным.никаких base64 - а дату необязательно, её можно включить в формулу если ссылка временная и валидна скажем 1 час 2. REMOTE_ADDR я бы не стал писать в правила, поскольку IP адрес не является показателем и будет даже лучше если один и тот же пользователь может скачивать файл с другого IP. Особенно в случае динамического IP (например Dial-up модем).поменялся ай пи - генерируй ссылку заново и менеджер закачки начнёт продолжать закачку А если не продолжит - чтож поделать - заново) 3. Ты точно имел ввиду mod_redirect? может все же mod_rewrite? Если точно, то поясни пожалуйста что делает mod_redirect. И в чем отличие от mod_rewrite?блин я ошибкся прости - конечно же mod_proxy! С ним жизнь малина! Изменено 25 мая 2008 пользователем lifestar Цитата Ссылка на сообщение Поделиться на других сайтах
wawilon 0 Опубликовано: 25 мая 2008 Рассказать Опубликовано: 25 мая 2008 поменялся ай пи - генерируй ссылку заново и менеджер закачки начнёт продолжать закачку А если не продолжит - чтож поделать - заново) Мне кажется это глупо. С одного ай-пи качать или с разных абсолютно нет разницы. Получается мы просто создаем пользователю больше проблем. Мне тут вспомнилась одна история в тему: Когда то давно, когда все сидели на dial-up'ах один провайдер сделал такую фишку (на свою голову похоже). Вообщем он сказал что первые 15 секунд соединения бесплатны. Далее одна умная голова в лице моего друга, написала скрипт редиалера ))) Вообщем скрипт дозавнивался до провайдера, ждал 15 секунд, разрывал связь и снова звонил. На дозвон уходило 5-10 секунд. А в результате - абсолютно безплатный интернет!!! =))))) с небольшими постоянными разрывами )) Я тут представил как бы он за 15 секунд по быстрому генерил бы новую ссылку и докачивал бы файл )) А вообще эта история так... оффтоп Цитата Ссылка на сообщение Поделиться на других сайтах
mitriy 5 Опубликовано: 25 мая 2008 Рассказать Опубликовано: 25 мая 2008 а стандартным антиличем в ДЛЕ нельзя воспользоваться? Цитата Ссылка на сообщение Поделиться на других сайтах
Mountain 0 Опубликовано: 24 июня 2008 Рассказать Опубликовано: 24 июня 2008 (изменено) Стандартный не скрывает, в любой качалке видно реальный путь! Изменено 24 июня 2008 пользователем Mountain Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.