PHP下载链接限制

时间:2014-02-03 19:15:35

标签: php hyperlink download restriction

我正试图在下载链接/计数器上放置一些安全性,但作为一个完整的PHP新手,我不知道如何处理它。

目前,下载按钮链接到一个简单的file.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(或推荐的任何内容)?我没有用户变量,它是一个公共链接,无需任何注册。

例如:

  • 限制以便只能下载一次,然后您必须等待至少30分钟才能再次点击

  • 每个IP限制为每天下载一次

  • 或其他一些好的解决方案

任何指向正确方向的人都会非常感激。

2 个答案:

答案 0 :(得分: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等)。

答案 1 :(得分: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;

}