防止外部链接到页面

时间:2009-07-20 18:41:56

标签: php header

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

download.php?file=file_refrence_here

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

http://www.mysite.com/download.php?the_file_refrence

显然$_SERVER[HTTP_REFER]不安全。

虽然我只是担心一般的链接,而不是那些足够聪明的人来改变他们的标题字符串。

3 个答案:

答案 0 :(得分:7)

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

例如

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

$url="download.php?file=$file&e=$expiry&h=$hash";

现在,当您处理此类请求时,您可以重新计算哈希并检查呈现的哈希值是否相等:这可以确保创建该URL的人知道盐,而人们希望这只是您的站点。如果哈希值有效,那么您可以信任到期时间,如果它没有到期,则允许下载。

如果您愿意,也可以在哈希中包含其他内容,如IP地址和用户代理,如果您希望更有信心请求下载链接的用户代理是实际执行下载的用户代理。

答案 1 :(得分:4)

您无法阻止某人链接到您的网页,因为您无法阻止某人在一张纸上写下 sunflower 这个词。

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

答案 2 :(得分:2)

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

这样,没有时间限制(如果你喜欢的话,也不能包括其中一个),但是文件无法从查看初始页面的IP地址下载。< / p>