サーバー上に「file.txt」などのファイルがあります。異なるドメインからリクエストされる場合があります。
このファイルが要求されたドメインを追跡し、このデータをどこかに保存する方法はありますか?
サーバー上に「file.txt」などのファイルがあります。異なるドメインからリクエストされる場合があります。
このファイルが要求されたドメインを追跡し、このデータをどこかに保存する方法はありますか?
はい、リファラーを取得して保存するだけです。変数は $_SERVER['HTTP_REFERER'] です
選択肢は 2 つあります。ファイルを提供する PHP スクリプト ( http://teddy.fr/blog/how-serve-big-files-through-php ) を作成し、PHP を使用してそのリファラーを保存します。
あるいは、Web サーバーは、アクセスされたすべてのファイルのログを保持します。この (構造化された) ログをスキャンしてファイルへのアクセスを探し、リファラーを取得できます。AWStats など、いくつかのログ分析プロジェクトがあります。
ドメイン名が最良の選択肢になるとは思いません..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']);
}