我正试图在下载链接/计数器上放置一些安全性,但作为一个完整的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限制为每天下载一次
或其他一些好的解决方案
任何指向正确方向的人都会非常感激。
答案 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;
}