下面的脚本 test.php 旨在放置在我所有 WordPress 站点的特定目录中。它的目的是抓取下面$source地址处的文件并将其解压到它所在的目录中。这就是它的全部目的。
例如,我的中央服务器上将有一个仪表板界面,其中列出了存在此脚本的所有站点。然后,我将执行一个 cURL 例程,该例程遍历每个站点并对此脚本执行调用,从而有效地将更新文件一次性发送给所有站点。
调用是这样的......
...processing site 1 update...
http://targetsite1.com/somedeepdirectory/test.php?query=updates.zip
...processing site 2 update...
http://targetsite2.com/somedeepdirectory/test.php?query=updates.zip
...etc until all my sites have been updated.
我的问题是(1)这个脚本的安全性(强化)程度如何。以及(2)我应该采取哪些检查来使更多......
我认为至少我会限制 myquery 的字符数,并检查 myquery 中的有效负载是否存在恶意的、意外的文件类型?
<?php
// 测试.PHP
$source = 'http://mycentralserver.com/protected/'.$_GET['myquery'];
$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();
}
?>
该脚本当前状态下的安全性非常好。我确实有一些担忧。在任何情况下,您都不得意外下载 .php 文件并将其存储在您的 Web 根目录中。这是该脚本可能发生的最糟糕的事情,因为它可能是一个远程代码执行漏洞。文件应下载到特定目录中,如果您担心其他人访问此文件,则应在该文件夹中的 .htaccess 中执行“拒绝所有”操作。如果此脚本中有任何错误,您应该删除下载的文件。事实上,我建议尽快删除下载的文件。
我担心的是脚本应该优雅地出错。您应该检查以确保您已获得所需的内容。即使该文件不是 .php 文件,它也可以包含 php 代码<?php ?>
然后可以对其进行 include() 处理,从而将本地文件包含 (LFI) 漏洞转变为全面的远程代码执行。
在安全的 php 配置中,allow_url_fopen 应该关闭,PhpInfoSec 同意我的观点。这意味着 fopen() 不能用于 HTTP。默认情况下启用allow_url_fopen,我在所有生产系统上禁用它。原因是我亲自在 Coppermine 照片库中编写了一个远程代码执行漏洞,利用了这种不安全的默认设置。 PHP 中的 HTTP 应该始终使用 CURL,它更安全、更稳定。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)