Создать ссылку на скачивание через ip и время

есть прямая ссылка для скачивания файла. пользователи могут скачать эту ссылку после выплаты, например:

http://example.com/download/webapp.rar 

Но мне нужно создать ссылку на ip и время, ограниченную загрузкой, чтобы предотвратить пик файла с другими. Я хочу сделать это без использования каких-либо баз данных. что-то вроде этого :

 http://example.com/download.php?a5fds588fgdf 

или

 http://example.com/download/a5fds588fgdf 

есть ли советы?

Related of "Создать ссылку на скачивание через ip и время"

Это действительно хороший модуль nginx.

URL-адрес получает два параметра – назовем их s (security) и t (timestamp). Безопасность – это безопасный хэш, генерируемый из метки времени, пути и соли (в вашем случае просто добавьте ip).

 $ip = $_SERVER['REMOTE_ADDR']; $salt = 'change me cause im not secure'; $path = '/download/webapp.rar'; $timestamp = time() + 3600; // one hour valid $hash = md5($salt . $ip . $timestamp . $path); // order isn't important at all... just do the same when verifying $url = "http://mysite.com{$path}?s={$hash}&t={$timestamp}"; // use this as DL url 

Проверять:

 $ip = $_SERVER['REMOTE_ADDR']; $salt = 'change me cause im not secure'; $path = $_SERVER['REQUEST_URI']; $hashGiven = $_GET['s']; $timestamp = $_GET['t']; $hash = md5($salt . $ip . $timestamp . $path); if($hashGiven == $hash && $timestamp <= time()) { // serve file } else { die('link expired or invalid'); } 

Теперь вам просто нужно переписать закачки на этот «человек в середине», и вы закончили.

Пример перезаписи для nginx:

 location /download { rewrite ^.*$ /download.php last; break; } 

Я не очень знакомы с перезаписью apache, поэтому вы можете проверить это самостоятельно.

Если вы используете один из следующих модулей, вам не нужно проверять все это самостоятельно, и это намного лучше, но обратите внимание, что он дает больше конфигурации, а иногда и другой способ генерации URL-адреса и хэша (см. Здесь документы модуля).

Или вы просто используете защищенный модуль связи nginx: http://wiki.nginx.org/HttpSecureLinkModule

Существует также подвеска для lighty: http://redmine.lighttpd.net/wiki/1/Docs:ModSecDownload

Или безопасный модуль загрузки nginx: http://wiki.nginx.org/HttpSecureDownload

Возможно, что-то для апачей тоже … Может быть, вы могли бы что-то сделать с переписаниями …

Если вас не беспокоят люди, способные декодировать некоторые параметры, такие как IP или timestamp, вы можете попробовать что-то вроде этого:

 <?php $salt = 'SALTING'; // Hash cipher $key = new stdClass(); $key->limit = time()+3600; // 1 hour limit $key->ip = $_SERVER['REMOTE_ADDR']; $key->security = sha1(sha1($salt.serialize($key))); // Double sha1 for fun $key_param = base64_encode(serialize($key)); echo sprintf('http://mysite.com/download/%s', $key_param); ?> 

Теперь для получения уникального ключа, действительного 1 часа, для ip $ key-> ip.

Чтобы проверить это:

 <?php $salt = 'SALTING'; $key = $_GET['key']; $key = base64_decode($key); $key = unserialize($key); if($key->security != sha1(sha1($salt.serialize($key)) || $_SERVER['REMOTE_ADDR'] != $key->ip) { throw new Exception('Security breach. U mad bro ?'); } ?> 

И все готово 🙂 Нет базы данных. После этого хешируются только хэши.

Но я думаю, что простая $_SESSION[$file_id] = time()+3600; будет делать трюк в одной строке … Не так весело.

Мой главный совет будет использовать базу данных!

Но если вам абсолютно необходимо сделать это без этого, я бы предложил использовать библиотеку кеширования, такую ​​как cache-lite: http://pear.php.net/manual/en/package.caching.cache-lite.intro.php

Многие фреймворки PHP (если вы их используете) также поставляются с библиотекой кэширования

Вы можете кэшировать IP-адрес и случайный ключ, который вы назначаете вместе с датой истечения срока действия (некоторые библиотеки кэшей также позволят вам назначить время проверки кеша)