2012-08-22 46 views
2

我需要您的帮助为我的网站http://usb-online.fr。这是一个PHP文件托管网站和这里的的下载事物的一部分:PHP文件托管

header("Content-Type: $mime; name=\"$fichier\""); 
header("Content-Transfer-Encoding: binary"); 
header("Content-Length: $taille"); 
header('Content-Description: Fichier hebergé par usb-online.fr'); 
header("Content-Disposition: attachment; filename=\"$fichier\""); 
header('Expires: 0'); 
header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
header('Pragma: public'); 

ob_clean(); 
flush(); 
log_download($file,$infos['auteur'],$taille); 
bunzip2($path); 

如果你试试这个网址: http://usb-online.fr/file-download-822MjYzMg.html 你会看到一个下载对话框打开,并且不显示图像,这就是我想要的。 但是用户在网站上做了<img src="http://usb-online.fr/file-download-822MjYzMg.html"/>,他可以显示图像,我的服务器变得很忙。我不想让这个,我该怎么办? http://usb-online.fr/file-download-822MjYzMg.html

回答

1

我不确定你可以做你想做的。如果您允许浏览器访问URL,则无法控制对远程端数据的操作。

1

你指的是'Hotlinking'有几种方法可以禁用它。

下面是描述哪种适用于您的情况; http://safalra.com/programming/php/prevent-hotlinking/否则在Google上可以找到很多。

+0

它们使用$ _SERVER ['HTTP_REFERER']。我认为这不可靠。 – timmalos

+0

我不能这样做,因为链接可以进入论坛或类似的东西,他们应该能够下载文件。所以我不能说:如果有referer不显示文件。 – timmalos

1

为会话添加一个随机数。使用该随机数作为要保护的图像的URL的一部分。当您收到图像请求时,只有在提供用户的现时值时才会回复。

一个随机数本质上是一些随机位,可能是一个数字,可能是一个字符串。随机数通常用于防止CSRF攻击。在这种情况下,您将创建一个新的随机值,并将其存储在用户的会话中。在这个例子中,我们使用“asdfgh”作为随机数。然后使用类似

<img src="yoururl.php?n=asdfgh"> 

在yoururl.php,检查从请求n的值存储在用户会话的随机数相匹配。没有匹配,没有图像。

+0

对不起,但我不是英语,并不真正了解'nonce'。你能详细解释一下我的意思吗? – timmalos

+0

我给答案添加了一个nonce的解释。它有帮助吗? – walrii

+0

查看他对Gerald Versluis的回答,他想允许从外部网站链接到该文件,因此没有会​​话。 – Barmar