0

サーバー上に「file.txt」などのファイルがあります。異なるドメインからリクエストされる場合があります。

このファイルが要求されたドメインを追跡し、このデータをどこかに保存する方法はありますか?

4

2 に答える 2

1

はい、リファラーを取得して保存するだけです。変数は $_SERVER['HTTP_REFERER'] です

選択肢は 2 つあります。ファイルを提供する PHP スクリプト ( http://teddy.fr/blog/how-serve-big-files-through-php ) を作成し、PHP を使用してそのリファラーを保存します。

あるいは、Web サーバーは、アクセスされたすべてのファイルのログを保持します。この (構造化された) ログをスキャンしてファイルへのアクセスを探し、リファラーを取得できます。AWStats など、いくつかのログ分析プロジェクトがあります。

于 2012-04-14T20:52:37.067 に答える
1

ドメイン名が最良の選択肢になるとは思いません..IP address for制限を守ることをお勧めします

$_SERVER ['HTTP_REFERER']ファイルを呼び出している、またはファイルを読み込もうとしている正確なスクリプトを確認するために使用することもできます

試す

$allowedReferer = array (
        "http://me.test.com/xxx/bbb/zmy.php?",
        "https://me.why.com/xxx/bbb/zmy.axpx" ,
        "http://localhost/lab/stockoverflow/"
);

$allowedIP = array (
        "192.168.0.1",
        "192.168.0.1" ,
        "::1"
);

$file = "file.pdf"; // its can also be a value form $_GET

if (! in_array ( quickIP (), $allowedIP )) {
    die ( "IP LockDown : " . quickIP () );
}

if (! isset ( $_SERVER ['HTTP_REFERER'] )) {
    die ( "Missing Referer" );
}

if (! in_array ($_SERVER ['HTTP_REFERER'] , $allowedReferer)) {
    die ( "Referer Lockdown "  . $_SERVER ['HTTP_REFERER']);
}

$array = parse_url ( $_SERVER ['HTTP_REFERER'] );

header ( 'Content-type: application/pdf' );
header ( 'Content-Disposition: attachment; filename="' . $file . '"' );
readfile ( $file );

function quickIP() {
    return (empty ( $_SERVER ['HTTP_CLIENT_IP'] ) ? (empty ( $_SERVER ['HTTP_X_FORWARDED_FOR'] ) ? $_SERVER ['REMOTE_ADDR'] : $_SERVER ['HTTP_X_FORWARDED_FOR']) : $_SERVER ['HTTP_CLIENT_IP']);
}
于 2012-04-14T21:50:33.310 に答える