这个PHP代码是恶意的,我如何保护我的托管?

时间:2016-11-01 17:38:34

标签: php security webserver plesk

我为客户托管了一个网站,我们被要求为其他第三方网站商店提供一些额外的图像。

所以我创建了一个辅助FTP帐户,其根目录设置为托管上的某个子文件夹。

客户有网页设计师正在构建此外部网站的布局,将所有图像放在此FTP空间中。

今天我在error_log中发现了一些警告通知,并注意到它来自一个也在这个FTP空间内的php文件。

PHP的内容是:

<?php
ini_set('display_errors',1);
$file1=trim($_REQUEST['f1']);
$read1=file_get_contents($file1);
$read1 = rawurlencode($read1);
echo "document.write(unescape(\"$read1\"))";
?>

当我第一次阅读代码时,我无法弄清楚它在FTP空间中的原因或它做了什么但是我开始玩f1参数添加一些路径以查看返回的响应,我发现我可以输出我的wordpress安装wp-config.php文件,该文件是从这个FTP的根文件夹中返回一个文件夹。

例如通过php脚本运行此参数。它输出了我的配置内容: domain.com?f1=/mnt/storage/vhosts/domain.com/httpdocs/wordpress/wp-config.php

现在我只想弄清楚这个代码是否因为恶意而被置于FTP存储中?

在托管主机上的子文件夹时,如何保护我的文件不被这样读取?

感谢。

1 个答案:

答案 0 :(得分:1)

该脚本打开GET参数中传递的文件,读取它,URL对其进行编码,然后将其发送到包含在客户端解码的JavaScript中的浏览器。

该剧本几乎保证会被恶意写入。虽然输出文件的内容可能具有合法用途,但这里使用的(非常基本的)混淆技术将其推到了任何合理怀疑的边缘。

您的用户的FTP根目录可能受到保护,但您似乎没有为您的用户运行单独的PHP解释程序。这意味着任何能够将代码编写到其webspace并通过PHP解释器执行的用户都可以像运行PHP解释器的用户一样运行代码。由于PHP必然需要读取wordpress配置,因此几乎无法保证当前设置的安全。

理想情况下,您需要使用自己的PHP解释器隔离自己的chroot或docker实例中的每个用户。除此之外,您绝对不应该允许FTP访问或任何其他方法来上传系统上的文件,因为安全模型根本不是为了能够承受这种级别的用户访问而设计的。