2014-02-03 2 views
0

Я пытаюсь установить некоторую безопасность на ссылку для загрузки/счетчик, но как полный PHP-новичок, я не уверен, как подойти к нему.PHP ограничения ссылок на скачивание

В настоящее время кнопка загрузки ссылается на простой файл.php, который увеличивает простой счетчик загрузки в count.txt.

file.php выглядит следующим образом:

<?php 

$hit_count = @file_get_contents('count.txt'); 
$hit_count++; 
@file_put_contents('count.txt', $hit_count); 

header('Location: examplename.zip'); // redirect to the real file to be downloaded 

Что бы самый простой способ добавить некоторую защиту здесь, на на IP основе (или любой другой рекомендуется)? У меня нет пользовательской переменной, это общедоступная связь без какой-либо регистрации.

Ex:

  • Ограничить так, что он может быть загружен только один раз, а затем вам придется подождать, по крайней мере, 30 минут, чтобы снова нажмите

  • Ограничить одной загрузки в день на IP

  • Или некоторые другие хорошие решения

Любые указатели в правильном направлении были бы весьма признательны.

+0

'$ _SERVER [ 'REMOTE_ADDR'] 'содержит пользователей IP. Что касается ограничения одной загрузки на каждый IP-адрес в день, вам придется немного поработать над этим. Вам необходимо будет сохранить все IP-адреса вместе с отметкой времени и истечь через 6/12/24 часа. Вероятно, какая-то база данных SQL будет лучше – user2537383

+0

Хранение в db было бы намного более полезным. – Mir

ответ

0

Что бы я сделал, это защита IP-базы.

Проверьте этот псевдокод.

IF ip not stored 
    store ip 
    store current_timestamp 
    allow download 
ELSE 
    Retreive stored timestamp for the ip 
    IF currentstamp - retreived timestamp < 30min 
     disallow 
    ELSE 
     update current_timestamp for ip 
     allow download 

Вы можете хранить IP в файле или в базе данных (MySQL, PostgreSQL, SQLite и т.д.).

0

Я получил помощь от друга, и вот как он решил это с MD5/Hash +, сделав ссылку действительной в течение 5 минут.

На странице загрузки:

<? $time = time(); ?> 
<a href="yourlink-path/file.php?time=<?=$time?>&hash=<?=md5($time.'BADASS')?>">DOWNLOAD HERE</a> 

И в file.php:

<?php 

$hash = $_GET['hash']; 
$linktime = $_GET['time']; 

if (md5($linktime.'BADASS') == $hash) { 

    // check if time is not older than 5 mins 
    $currenttime = time(); 

    if (($currenttime - intval($linktime)) < 300) { 

     // DOWNLOAD HERE 
     $hit_count = @file_get_contents('count.txt'); 
     $hit_count++; 
     @file_put_contents('count.txt', $hit_count); 
     header('Location: myfile.zip'); // redirect to the real file to be downloaded 

     exit; 

    } else { 

     // LINK IS TO OLD, do something here, maybe just: 
     exit; 

    } 
} else { 

    // Hash has been tampered with, do something, maybe just: 
    exit; 

}