我醒来发现我的共享网络主机中所有具有 777 权限的文件夹都有两个新的 php 文件。无法读取文件内的代码 - 以下是解码后的版本:http://pastie.org/779226(这是什么……?)该代码甚至被注入到一些 PHP 文件中。
我完全搞不懂为什么有人会这样做?我知道拥有 777 权限不是最明智的做法,但他们一开始是如何进入我的文件夹系统的。
我只是一个客户端程序员,如果我能提供一些关于如何防止这种情况再次发生的建议就太好了。
干杯。
答案1
以下是该脚本的去混淆版本:http://pastie.org/private/iobgt7aetg8mezoepucsg
该代码似乎包含来自另一个网站的外部 PHP 代码,并在执行此操作时收集有关访问者的信息。
发生这种情况的一种方式是,您允许在可从外部访问的目录中上传文件。未经适当验证就这样做是危险的,因为恶意用户可以上传带有恶意代码的 PHP 文件(使用您的图片上传)。如果 Web 服务器配置不正确,代码将在请求时运行。
为了避免此类问题,请确保:
- PHP 进程由受限用户运行。
- 不需要编辑的文件被设置为仅可由所有者写入(0644 或 0744,取决于是否需要执行位)。
- 仅将上传目录设置为可写。
- 尝试使用 webroot 之外的上传目录。然后使用
readfile()
提供该文件。 - 验证文件。如果您希望表单仅允许图片,请验证魔法位并确保图片有效。这是一个很容易被忽视的步骤。其他格式也是如此。不要依赖客户端发送的文件扩展名或 mimetype。检查实际文件内容。
答案2
我能想到至少有两种可能性:
- 他们找到了你的 FTP 密码
- 他们在你的 PHP 软件中发现了一个缺陷
为了防止发生这种情况:
- 使用复杂的密码(至少 9 个字符,混合大小写、数字和特殊字符)
- 从 777 开始运行,就好像它是野兽的数字一样;尝试给网络服务器不再比读取脚本的权限,并给予必须写入的文件夹/文件(希望很少见)特殊权限。
如果您可以访问某些日志(来自 Apache 的访问日志和来自您的网站运行的任何 FTP 服务器的 FTP 日志),这可能会有助于了解发生了什么。
他们是否能够利用脚本中的一个简单缺陷做出如此多的更改令人怀疑,除非这是一个真正存在的缺陷(比如你有一个未受保护的脚本,只将 fopen() 包装在用户喜欢的任何内容上),所以我会优先检查 FTP 登录。