2016-11-01 57 views
-1

我为客户托管一个网站,我们被要求为客户其他第三方网站商店托管一些额外的图像。这是PHP代码恶意,我如何保护我的托管?

因此,我创建了一个辅助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存储中的任何其他原因,而不是恶意?

如何保护我的文件不会像这样在读取托管子文件夹的FTP访问权限时被读取?

谢谢。

+0

只是不给任何人的根,但你... – Fusseldieb

+0

PHP文件**将**执行,但你可以防止它对你的服务器造成损害。只需设置足够的权限,并且不**与其他用户共享一个root帐户。 – Fusseldieb

+0

在互联网上阅读“chown”和“chmod”(如果您在服务器上使用linux) – Fusseldieb

回答

1

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

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

您的用户的FTP根目录可能受到保护,但似乎您并未为您的用户运行单独的PHP解释器。这意味着任何可以将代码写入其Web空间并通过PHP解释器执行的用户都可以运行代码,无论PHP解释器运行的用户是谁。由于PHP一定需要阅读wordpress配置,因此您无法保证当前的安装。

理想情况下,您希望将自己的chroot或docker实例中的每个用户与他们自己的PHP解释器进行隔离。除此之外,您绝对不应该允许FTP访问或任何其他方法上传您的系统上的文件,因为安全模型根本没有设计为承受此级别的用户访问。

+0

谢谢。我想我会为图像创建一个子域名,然后关闭这个子域名的PHP。 – user2129024

+0

我删除了PHP文件,并注意到在外部商店网站上显示的一些错误。从控制台中的错误中,我可以确认他们正在使用php脚本来获取存储在FTP空间中的html文件的内容。 – user2129024

+0

所以我需要PHP,我确实需要这个脚本来工作。我只需要停止脚本访问主机中的文件。为此,我将open_basedir改为使用{DOCROOT} {/} {:} {TMP} {/}这意味着php脚本只能访问子域上的文件。 – user2129024