-1

我正在寻找最佳实践、模块等,以通过 PHP 应用程序安全地进行文件系统操作。类似 CMS 的应用程序不会使用数据库,而是将降价文件放在文件夹中并在显示时进行处理。因此,会有很多移动文件,重命名文件,写入文件等。

我正在寻找一些有助于管理此类操作、输入清理、移动文件的库(例如,相当于 ORM)。等等,而不是从头开始。如果没有这样的可用,我想要一个最佳实践列表等。

到目前为止,我只找到了来自 PHP.net 的指导

更多信息:该计划是在Stacey之上构建一个基于 Web 的最终用户界面。我会有一个带有最终用户界面的测试环境,当更改准备好时,它们会同步到生产环境。这是一个非基于数据库的系统。从开发人员的角度来看,Stacey 便于管理和使用,但用户不想直接使用 markdown 和移动文件等。

另外:请限制对 PHP 问题的回答;服务器诸如 chroot 或锁定服务器之类的事情将取决于用户的个人环境和需求。从开发的角度来看,我想专注于保护我的分布式代码。

4

1 回答 1

0

我不知道有任何特定的库可以做到这一点——PHP 中的文件系统支持很广泛,所以我不确定为什么它们是必要的。您可能最好从现有的 CMS 开始并对其进行修改以执行您想要的操作 - 但是我知道这可能是不可能的。这听起来也像是应该使用数据库的东西,但我想你已经知道了。

我不能声称知道确切的最佳实践,这是更一般的建议。

首先,您的 Web 服务器——以及您的 PHP 脚本——将以特定用户身份运行。这取决于您的配置和特定服务器以及底层操作系统。理想情况下,您希望确保该用户只能访问您用作存储的文件系统区域。拒绝对其他任何地方的所有访问,除了对它真正需要的地方(你的脚本等)的读访问和对存储区域的读写。执行此操作的确切方法取决于您的系统。

这是你的最后一道防线,不要依赖它,它是安全网。

目前尚不清楚究竟是什么会导致文件被重命名、移动、更改,但可以肯定的是它来自用户输入。因此,您需要确保清理所有用户输入,如果他们的页面名称成为您想要的文件名,不希望让某些人输入../../index.php作为页面名称并核对您的主站点。

总是假设最坏的情况:一个非常了解您系统内部并且旨在造成最大损害的用户。不要依赖“默默无闻的安全”或“没有人会那样做”。

我会做的(和以前做过的)有两个方面。首先将所有文件系统函数包装到一个类中,该类提供与方法相同的功能。此类的工作是检查是否允许发生任何事情,这意味着它可能必须读取路径和文件名并计算出更改的位置。

其次,清理所有可能是恶意的用户输入,当它第一次到达时。您可能想查看使用escapeshellarg或 URL 编码,或其他内容,具体取决于您的输入。

您还提到文件是在运行时处理的,如果允许用户编写脚本(或更糟糕的是执行的 PHP),那么您会遇到更多问题并且可能存在根本问题。但从你的问题中并不清楚。

希望有帮助。

于 2013-08-01T01:26:47.230 回答