2010-02-24 59 views
0

在我previous question on this topic,就會影響是什麼,如果我刪除了動態變量,而是用一個靜態像你見下文取代它......如何安全(硬化)是這個腳本(部分2)

$source = 'http://mycentralserver.com/protected/myupdater.zip'; 

我已經包括下面爲了方便代碼...

<?php 
// TEST.PHP 

$source = 'http://mycentralserver.com/protected/myupdater.zip'; 
$target = '.'; 

$out_file = fopen(basename($source), 'w'); 
$in_file = fopen($source, 'r'); 
while ($chunk = fgets($in_file)) { 
    fputs($out_file, $chunk); 
} 
fclose($in_file); 
fclose($out_file); 

$zip = new ZipArchive(); 
$result = $zip->open(basename($source)); 
if ($result) { 
    $zip->extractTo($target); 
    $zip->close(); 
} 

?> 
+0

正如Micheal Brooks在回覆您的上一篇文章中所述,您應該使用'curl'而不是'fopen'來抓取遠程文件。 – 2010-02-24 22:39:08

+0

謝謝,我將執行邁克爾的所有建議(至少那些不涉及動態獲取的建議,因爲我廢除了) – 2010-02-24 22:40:51

+0

您仍然容易受到DNS劫持的影響。就像MadCoder指出的最好的gpg更新和驗證簽名(使用存儲在此服務器上的密鑰)。誰可以執行此更新腳本? – mar 2010-02-25 00:27:09

回答

1

你至少應該用散列SHA-1的壓縮然後再與摘要,以確保它沒有改變。這些摘要應該非常難以取代。

我仍然認爲自動更新有點不方便。

+0

感謝提示Xorlev。所以在我更新中央服務器上的zip的時候,我會更新摘要。然後,我會在test.php中放置一些代碼來查找摘要值,並確認收到的zip是一個匹配項。我理解正確嗎? – 2010-02-24 22:44:31

+0

爲什麼自動更新? – 2010-02-24 22:44:51

+1

然後你有更新摘要的問題。如果可能,請在服務器上安裝pgp(或gpg),併爲每個更新的zip文件創建分離的簽名。下載壓縮文件和簽名並在解壓縮之前驗證簽名。 – MadCoder 2010-02-24 23:48:15

0

5.2.6及更高版本的PHP有一個漏洞,允許通過Zip的extractTo()方法寫入任意位置。

參見:http://www.securityfocus.com/bid/32625

因此,如果壓縮的內容是不可信的,則必須使用PHP 5.2.7或更高版本(或使用自己的郵編解析器)。