我有一个前端服务器,其中包含用户可以下载的各种信息,以及一些具有这些文件的后端服务器。当用户单击文件的下载链接时,他们会重定向到具有这些文件的后端服务器。
现在我想在我的后端服务器中接受请求当且仅当请求是从前端服务器重定向的,这样用户就不能直接访问后端服务器。
有没有办法做到这一点?请帮我!
谢谢你
我有一个前端服务器,其中包含用户可以下载的各种信息,以及一些具有这些文件的后端服务器。当用户单击文件的下载链接时,他们会重定向到具有这些文件的后端服务器。
现在我想在我的后端服务器中接受请求当且仅当请求是从前端服务器重定向的,这样用户就不能直接访问后端服务器。
有没有办法做到这一点?请帮我!
谢谢你
if(isset($_SERVER['HTTP_REFERER']) && ($_SERVER['HTTP_REFERER']=='yoursite.com' ) {
}
'HTTP_REFERER' - 将用户代理引向当前页面的页面地址(如果有)。这是由用户代理设置的。不是所有的用户代理都会设置这个,有些提供修改 HTTP_REFERER 作为一个特性的能力。简而言之,它不能真正被信任(来源)。
问题在于,当您的前端服务器将用户重定向到您的后端服务器时,它会“通过用户”进行操作。
即“www.front-end.com”告诉用户给她的HTTP referer头域赋值“www.front-end.com”,然后将这个HTTP请求发送到“www.back-end.com” ”。聪明的用户可以修改她的标题并欺骗你的系统。
对于您的情况,您应该做更多的工作并实施 Rapidshare 或 Megaupload 或大多数其他文件托管所做的事情。
其中一个想法可能如下:前端生成一个秘密随机字符串(“$ticket”)。然后它将它传递给后端(通过curl或直接),要求将其存储到后端的数据库中。然后前端通过以下方式重定向用户:
header("Location: http://www.back-end.com/index.php?ticket=$ticket");
后端比较票证并让用户进入。
您还需要防止滥用它,例如在一段时间后使票证无效。