2012-03-10 39 views
0

我在使用Firefox下載的文件上遇到無效簽名證書問題。 IE,Opera,Safari和Chrome都很好。如果通過單擊FF中的鏈接直接下載文件,那麼也可以,但如果使用PHP下載文件以確保安全性,則該文件大1個字節,末尾有x0A,我認爲這導致它無法通過驗證檢查。 PHP很簡單:使用Firefox以PHP下載的文件大小錯誤

<?php 
$file = "../downloads/".$_GET['link']; 
$size = filesize($file); 
$type = filetype($file); 
header('Content-Type: application/octet-stream'); 
header("Content-Transfer-Encoding: Binary"); 
header("Content-Disposition: attachment; filename=".basename($file)); 
header("Content-Length: ".$size); 
header("Content-Type: ".$type); 
readfile($file); 
?> 

有沒有人有任何想法爲什麼Firefox本身應該有問題在這裏得到的大小?感謝任何想法。

+1

請閱讀此:http://stackoverflow.com/questions/2882472/php-send-file-to-user – rkosegi 2012-03-10 08:31:13

+4

如果我使用'?link = ../../../includes/db_connection_info怎麼辦? php'? – alex 2012-03-10 08:31:13

+0

我知道這不是你問題的一部分,但你應該確實$ _GET ['link'] sanatize,否則這個腳本將允許任何人下載你的文件系統上的任何文件,網絡服務器可以訪問。 (也是php配置文件等) – Arend 2012-03-10 08:47:53

回答

0

替換下面一行

<?php 
header("Content-Length: ".strlen($file)); 
?> 

好運:)

+0

'$ file'包含文件的*路徑*,而不是文件內容本身。 – 2012-03-10 09:06:21

+0

Ta對於所有其他評論,網站並非真正的我的專業領域,我嚴格來說是一個切割n粘貼商人,所以會看看所有的建議。 Re Alex;對安全性的評論,不應該阻止文件權限 – user1164035 2012-03-10 11:00:56

4
  1. 檢查文件是否存在,並放置在允許的位置 - 現在攻擊者能夠下載到您的網絡服務器
  2. 幾乎每一個文件不要使用關閉phptag - ?>,每個空白後它將被髮送到瀏覽器
  3. 使用exit;剛剛readfile以確保沒有其他產生輸出的函數被調用。
+0

輝煌!它在?>之後確實有一些行,就像你所說的那樣,並且它正在工作。非常感謝。 – user1164035 2012-03-10 10:57:25

1

檢查內容類型標題,你設置了兩次,所以後者將被使用,它可能是類似於「內容類型:文件」由於功能filetype(),瀏覽器不能理解「文件」內容類型並將其作爲文本文件。我想這是額外的0x0a的原因。
評論「header(」Content-Type:「。$ type);」它會正常工作。