php - 这个脚本有多安全(强化)?

标签 php security

下面的脚本 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 文件并将其存储在您的网站根目录中。这是此脚本可能发生的最糟糕的事情,因为它是一个远程代码执行漏洞。文件应下载到特定目录,如果您担心其他人访问此文件,您应该在该文件夹的 .htaccess 中执行“拒绝所有人”。如果此脚本中有任何错误,您应该删除下载的文件。事实上,我建议尽快删除下载的文件。

我担心的是脚本应该优雅地出错。你应该检查以确保你已经获得了你正在寻找的东西。即使该文件不是 .php 文件,它也可以包含 php 代码 <?php ?>然后可以包含()'ed,这会将本地文件包含(LFI)漏洞转变为完全成熟的远程代码执行。

在安全的 php 配置中,allow_url_fopen 应该关闭并且 PhpInfoSec 同意我的观点。这意味着 fopen() 不能用于 HTTP。 allow_url_fopen 默认启用,我在所有生产系统上禁用它。原因是因为我在 Coppermine Photo gallery 中亲自编写了一个远程代码执行漏洞,利用了这种不安全的默认设置。 CURL 应该始终用于 PHP 中的 HTTP,它更安全、更稳定。

关于php - 这个脚本有多安全(强化)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2328819/

相关文章:

php - PDO 更新 mysql 字段

php - 如何显示特定div中的mysql表?

MySQL 服务器和 VB 2008 安全

php - PHP 5.5 的新 password_hash 函数中随机生成的密码 salt 有什么用?

flutter - Flutter应用程序中是否可以从nfc芯片读取护照数据?

php - 使用字符串mysql更新表

php - 使用 PHP 在 iOS 社交网络应用程序中发送好友请求并添加好友?

PHP fatal error : Call to a member function execute() on a non-object

android - 是否可以保护加密 key 不被 iOS/Android 中的恶意应用程序读取?

php - 防止数据库类中的 SQL 注入(inject)