我有一个下载脚本来处理我的下载:
download.php?file=file_refrence_here
如何阻止某人在其网站上放置链接,例如:
http://www.mysite.com/download.php?the_file_refrence
显然$_SERVER[HTTP_REFER]
不安全.
虽然我只是担心一般链接而不是人们足够聪明地改变他们的标题字符串.
一种方法是包含一个限时散列,在允许下载之前验证该散列.然后,分布式链接只有一个可以使用它的小窗口.
例如
$file="foo.mp3";
$salt="youpeskykids";
$expiry=time()+3600;
$hash=md5($salt.$file.$expiry);
$url="download.php?file=$file&e=$expiry&h=$hash";
Run Code Online (Sandbox Code Playgroud)
现在,当您处理这样的请求时,您可以重新计算散列并检查呈现的散列是否相等:这可以确保生成URL的人知道盐,而人们希望这只是您的站点.如果哈希值有效,那么您可以信任到期时间,如果它没有到期,则允许下载.
如果您愿意,也可以在哈希中包含其他内容,如IP地址和用户代理,如果您希望更有信心请求下载链接的用户代理是实际执行下载的用户代理.