2012-08-22 90 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