Php 防止外部链接到页面

Php 防止外部链接到页面,php,header,Php,Header,我有一个处理我的下载的下载脚本: download.php?file=file\u reference\u此处 如何防止某人在其网站上放置链接,例如: 显然,$\u服务器[HTTP\u reference]不安全 虽然我只是担心一般链接没有足够聪明的人来更改他们的标题字符串。一种方法是在允许下载之前包含一个经过验证的有时间限制的散列。然后,分布式链路只有一个很小的时间窗口可以使用 比如说 $file="foo.mp3"; $salt="youpeskykids"; $expiry=time()

我有一个处理我的下载的下载脚本:

download.php?file=file\u reference\u此处

如何防止某人在其网站上放置链接,例如:

显然,
$\u服务器[HTTP\u reference]
不安全


虽然我只是担心一般链接没有足够聪明的人来更改他们的标题字符串。

一种方法是在允许下载之前包含一个经过验证的有时间限制的散列。然后,分布式链路只有一个很小的时间窗口可以使用

比如说

$file="foo.mp3";
$salt="youpeskykids";
$expiry=time()+3600;
$hash=md5($salt.$file.$expiry);

$url="download.php?file=$file&e=$expiry&h=$hash";
现在,当您处理这样一个请求时,您可以重新计算散列并检查呈现的散列是否相等:这确保了创建URL的人都知道salt,希望它就是您的站点。如果散列是有效的,那么您可以信任到期时间,如果尚未到期,则允许下载


如果您想更确信请求下载链接的用户代理是实际进行下载的用户代理,您也可以在哈希中包含其他内容(如IP地址和用户代理)。

一种方法是在允许下载之前包含一个经过验证的有时间限制的哈希。然后,分布式链路只有一个很小的时间窗口可以使用

比如说

$file="foo.mp3";
$salt="youpeskykids";
$expiry=time()+3600;
$hash=md5($salt.$file.$expiry);

$url="download.php?file=$file&e=$expiry&h=$hash";
现在,当您处理这样一个请求时,您可以重新计算散列并检查呈现的散列是否相等:这确保了创建URL的人都知道salt,希望它就是您的站点。如果散列是有效的,那么您可以信任到期时间,如果尚未到期,则允许下载


如果你愿意,你也可以在散列中包含其他内容,比如IP地址和用户代理,如果您想更加确信请求下载链接的用户代理是真正进行下载的用户代理。

您不能阻止有人链接到您的页面,因为您不能阻止有人在一张纸上写“sunflower”一词


但是,如果您想防止跟随这样的链接将导致下载该资源,您需要以某种方式对请求进行身份验证。这可以通过生成只有您的页面才能创建的随机、临时有效的身份验证令牌来实现。

您无法阻止有人链接到您的页面,因为您无法阻止有人在一张纸上书写单词sunflower


但是,如果您想防止跟随这样的链接将导致下载该资源,您需要以某种方式对请求进行身份验证。这可以通过生成只有您的页面才能创建的随机临时有效身份验证令牌来实现。

另一种方法是,在生成下载链接时,对包含用户IP地址的数据包进行加密,并将其传递到URL中。如果IP地址与当前远程地址不匹配,下载脚本将解密数据包并拒绝访问


这样,就没有时间限制(并不是说如果您愿意,其中一个也不能包括在内),但是除了查看初始页面的IP地址外,无法从任何其他IP地址下载文件。

另一种方法是,在生成下载链接时,加密包含用户IP地址的数据包,并将其传递到URL中。如果IP地址与当前远程地址不匹配,下载脚本将解密数据包并拒绝访问


这样,就没有时间限制(不是说如果您愿意,其中一个也不能包括在内),但是除了查看初始页面的IP地址之外,无法从任何其他IP地址下载文件。

我可以在其中包括文件引用,不是吗?所以我最后得到了类似于download.php?hash_的东西,那么如果文件+ip的has与has-it错误不匹配,我可以在这里包含文件引用,不是吗?因此,我最终得到了类似于download.php?hash_的东西,那么如果文件+ip的has与has-it错误不匹配,为什么要阻止链接?为什么要阻止链接?