我一直在阅读有关服务器/Apache 安全性的资料,但遇到了一个矛盾。我读到过你不应该提供任何不在 Apache 范围内的文件,但我被告知你应该将文件保留在 Apache 范围之外。
我当前的设置是:
Apache 的范围:public_html/front。在 front 文件夹中,我保存了 html、css 和 javascript 文件。我还有一个文件夹 public_html/back,在 Apache 的范围之外,里面存放着我的 PHP、数据库和网站后端文件。所有网站目录和文件都有一个 www-data 的所有者/组。我都在 Free BSD 上运行这一切。
我应该将网站文件放在 Apache 之外吗?如果有任何其他服务器安全提示,我们将不胜感激。
答案1
如果您想要 Apache 提供的文件,则 Apache 应该可以访问它们。
但是,您不应该让 Apache 对任何不需要的文件具有写访问权限。
如果您有一个上传目录,您可以让 Apache 能够在该目录中写入,但它不能能够写入您的 PHP 文件、css 等。
答案2
您的设置完全可以接受,我甚至推荐它。
理想情况下,您的 DocumentRoot 应该仅指向需要提供给最终用户的文件。面向客户端的脚本使用的脚本和其他资产可以放在不同的目录中(例如 public_html/back )。例如,您的配置文件、数据库连接类等将放在非公共文件夹中。
如果您将所有内容都放在 DocumentRoot 下,那么您必须保护这些文件,以便它们不会提供给最终用户(例如,通过使用 .htaccess 阻止他们的下载或在直接加载这些文件时使用 PHP 终止请求)。
我要指出的是,“public_html”这个名称暗示民众面向文件。在我们公司,我们将 DocumentRoot 指向 public_html(或等效文件),并将“back”文件放在完全不同的目录下,以避免混淆。