这个脚本的安全性(硬化)(第2部分)

时间:2010-02-24 22:35:24

标签: php security

在我的previous question on this topic中,如果删除动态变量并将其替换为静态变量(如下所示),会产生什么影响...

    $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();
}

?>

2 个答案:

答案 0 :(得分:1)

您至少应该使用SHA-1对zip进行哈希处理并根据摘要进行检查,以确保它没有更改。这些摘要应该非常难以替代。

我仍然认为自动更新有点不确定。

答案 1 :(得分:0)

PHP 5.2.6及更早版本的漏洞允许通过Zip的extractTo()-method写入任意位置。

请参阅:http://www.securityfocus.com/bid/32625

因此,如果zip的内容不可靠,则必须使用PHP 5.2.7或更新版本(或使用您自己的Zip解析器)。