0

我在服务器上有一个文件,例如“file.txt”。可以从不同的域请求它。

有没有办法跟踪从哪个域请求了这个文件并将这些数据保存在某个地方?

4

2 回答 2

1

是的,只需获取引用并存储它。变量是 $_SERVER['HTTP_REFERER']

你有两个选择。您可以编写一个提供文件的 PHP 脚本 ( http://teddy.fr/blog/how-serve-big-files-through-php ) 并使用 PHP 存储该文件的引用。

或者,Web 服务器保留所有访问文件的日志。您可以扫描此(结构化)日志以访问您的文件并获取引用者。有几个日志分析项目,比如 AStats。

于 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 回答