最近出现了一个问题,我们系统上的一个用户需要让 apache 用户拥有对其网站的读写权限,以便其网站的上传部分正常工作。如何最大限度地降低恶意用户进入并提交文件的风险,最终删除 Web 目录中的文件,甚至接管 apache 守护进程?
我能想到的唯一解决方案是为网站创建一个子文件夹,Apache 可以读取和写入该子文件夹,但只能读取父目录。对file foo.zip
未压缩的上传数据进行完整性检查(如)和文件检查,然后重命名文件并将元数据添加到文件,以便在网站内部对其进行跟踪,然后将其移动到 Apache 无法写入且只能读取的文件夹中。
或者我只是有点偏执?
答案1
你的偏执是有道理的。
Apache 上传文件时产生的安全问题基于上传的 .htaccess 文件,该文件可以更改权限或允许用户访问 Apache 配置文件。
预防此问题的大部分方法可以通过首先正确保护 Apache 及其配置文件来解决。确保 Apache 在与公共文件完全不同的目录中运行(我使用不同的硬盘驱动器以防万一)。然后保护目录:
- 这个问题对允许上传工作的权限提供了一些见解:https://stackoverflow.com/questions/10990/what-are-the-proper-permissions-for-an-upload-folder-with-php-apache
- 本文对远程文件上传攻击进行了一些深入了解:http://www.linuxforu.com/how-to/security/securing-apache%E2%80%94part-9/
- 我还建议使用 REGEX 检查仅允许上传某些文件,例如:http://www.webdeveloper.com/forum/showthread.php?t=183015
如果您使用 PHP 编程,我还会进行一些额外的检查,以确保脚本无法从上传文件夹运行。基本上,当访问该文件夹时,禁止 PHP(或其他模块)执行。
我建议你查看 Google 上还有更多资源。希望这些资源对你有帮助。
答案2
您还没有说这是在什么操作系统上 - 这与安全性有很大关系。假设它是 linux/BSD/Unix...
您肯定希望将可写位置保留在文档根目录之外 - 所有访问都应由您自己的代码进行调解。
您可能希望将其保存在使用 noexec 安装的单独文件系统上。
对未压缩的上传数据进行健全性检查(如文件 foo.zip)和文件检查
从未听说过拉链炸弹然后?