4

私は自分のサイトを破壊しようとしているロボットや悪意のあるユーザーによって破壊されています。

mp3ファイルに対するすべてのリクエストをphpスクリプトにmod_rewritingして帯域幅リミッターを作成してみました。このスクリプトは、各IPを追跡し、1時間あたりにダウンロードできる量を制限します。これは問題なく機能しましたが、一部のユーザーにとっては、リンクがmp3ファイルへの直接リンクではないという多くの問題が発生しました。

あらゆる種類の強制ダウンロードヘッダーを試しましたが、一部のユーザーには機能したものが他のユーザーには機能しませんでした。

さて、問題は、mp3ファイルへの直接リンクを維持し、誰かがmp3ファイルをクリックして、リクエストを許可または拒否するトラッキングphpスクリプトを同時に実行することは可能ですか?

ありがとう!

(サーバーにはmod_bandwidthやその他の便利なmodがありません)

4

2 に答える 2

1

mod_rewriteソリューションは十分にエレガントであり、リンクを直接維持することが可能です。

で、PHP スクリプトへの.htaccessすべてのリンクを書き換えます。.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');
}

これで、すべてのリンクは直接のままになり、適切なヘッダーをユーザー エージェントに返し、ダウンロードを促すか、アクセスを拒否します。

于 2012-12-18T15:29:44.557 に答える
1

ユーザーがリンクをクリックしたときに使用状況を同時に追跡するのではなく、ランディング ページを、ユーザーの IP をチェックし、それに基づいてリンクを出力または非表示にする PHP スクリプトにしてみませんか? ファイルが明らかなフォルダー (例: yoursite/music/artist/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 時間後に定期的に削除します。

于 2012-12-18T14:49:12.313 に答える