我被机器人和恶意用户试图取下我的网站所摧毁。
我尝试通过将所有对mp3文件的请求mod_rewriting到php脚本来制作带宽限制器,该脚本将跟踪每个ip并限制每个小时可以下载的数量。这工作正常,但它为一些用户创建了很多问题,链接不是直接链接到mp3文件。
我尝试了各种强制下载标题,但对某些用户有用的功能对其他用户不起作用。
现在,问题是,是否有可能保持与mp3文件的直接链接,并且每当有人点击mp3文件同时运行一个允许或拒绝请求的跟踪PHP脚本时?
谢谢!
(服务器没有mod_bandwidth或任何其他有用的mod)
答案 0 :(得分:1)
而不是在用户点击链接时同时跟踪使用情况,为什么不让登录页面成为检查用户ip并根据输出链接或隐藏链接的PHP脚本? 如果您的文件存储在明显的文件夹中,例如 yoursite /音乐/艺术家/ Song.mp3的 你可以为它们创建软链接,这样就可以模糊路径。 在linux服务器上,您可以使用symlink()php函数创建到/ music目录的软链接,并输出路径为yoursite / 3awE2afeefef4a323 / artist / song.mp3,它仍应是文件的直接链接,例如:
<?php
$target = 'music/';
$link = 'a322ewrr323211';
symlink($target, $link);
?>
<html>
<body>
<a href="a322ewrr323211/artist/song.mp3">link</a>
</body>
</html>
然后每晚或在创建24小时后定期删除这些符号链接。
答案 1 :(得分:1)
mod_rewrite
解决方案非常优雅,可以直接保持链接。
在.htaccess
中,重写PHP脚本的所有.mp3
链接:
RewriteEngine on
RewriteRule \.mp3$ download.php
在PHP文件中,我们可以提取请求的URI,验证用户的IP并根据该验证返回相应的标题。
<?php
// Set variables
$requestedFile = trim($_SERVER['REQUEST_URI'], '/');
$ip = $_SERVER['REMOTE_ADDR'];
$protocol = isset($_SERVER['SERVER_PROTOCOL']) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0';
// If the file does not exist, throw a 404 error
if (!file_exists($requestedFile)) {
header($protocol . ' 404 Not Found');
}
// Is the user allowed to download?
function validateDownload($ip) {
/**
* Put your IP tracking and validation code here, returning `TRUE`
* or `FALSE`.
*/
return TRUE;
}
// Validate and perform appropriate action
$canDownload = validateDownload($ip);
if ($canDownload) {
header('Content-Disposition: attachment; filename="' . basename($requestedFile) . '"');
header('Content-type: audio/mpeg');
readfile($requestedFile);
} else {
header($protocol . ' 403 Forbidden');
}
现在所有链接都保持直接,您将相应的标头返回给用户代理,提示下载或拒绝访问。