首页 > 解决方案 > 使用 .htaccess 和将所有文件移出 Web 根目录之间是否存在安全差异?

问题描述

我正在尝试决定是否使用每个子目录中的 .htaccess 文件来拒绝对特定文件的所有请求(同时也拒绝目录索引),或者移动除基本文件之外的所有文件(index.php)是否更具安全意识, .htaccess, robots.txt) 在根目录之外并从索引文件中调用它们。

这两种用于保护我的 Web 应用程序中文件的方法在安全性方面是否存在任何重大差异?

这是根目录中 .htaccess 的外观视图。

# pass the default character set
AddDefaultCharset utf-8

# disable the server signature
ServerSignature Off

<FilesMatch "\.(htaccess|htpasswd|ini|phps|fla|psd|log|sh|lock|DS_Store|json|)$">
  order allow,deny
  allow from all
</FilesMatch>

# disable directory browsing
Options All -Indexes

# prevent display of select file types
IndexIgnore *.wmv *.mp4 *.avi *.etc

但是,如果某人知道目录结构(例如https://www.example.com/security/please_dont_look.cfg ),这不会阻止他们访问文件

尽管该文件不打印任何内容,但我不希望任何人知道它的存在,也不希望使用特定于站点的解决方案,例如使用 modredirect 将调用重定向到特定文件。

我可以在每个目录中使用 .htaccess 文件,例如:

order deny,allow
deny from all

从这个问题和回复(阻止访问某个文件夹中的文件

一种解决方案比另一种解决方案更防弹吗?

标签: apache.htaccesssecurity

解决方案


与在如此复杂的系统中一样,这里的安全性是关于拥有多道防线,保持简单并试图阻止尽可能多的攻击向量。

从理论上讲,这两种解决方案都应该为您提供完全相同的安全级别 - 在任何一种情况下都无法访问文件。

我建议将不应直接访问的文件移动到 Web 根目录之外的目录中。搞砸 htaccess 文件很容易,当您将文件移到 webroot 之外时,这是不可能的。这也将防止对服务器目录结构的定时攻击:读取 htaccess 文件会带来时间损失,这可能是可以衡量的,特别是如果您的 htaccess 文件变大并且每个子目录都有很多文件时。实际上我建议完全跳过 htaccess,直接在你的 vhost 配置中禁用索引,这样 Apache 就不需要寻找 htaccess 文件,从而加快你的网站速度。

此外,如果您通过 fcgi 运行 php,您应该禁止 apache 在文件系统级别上进行文件访问,而只允许从 php 访问。使用此设置,除非您有一些权限提升漏洞(在这种情况下您无论如何都被搞砸了),否则应该完全不可能通过攻击网络服务器(不包括 php)来访问您的文件。

在此设置中访问您的机密文件的唯一方法是说服 PHP 读取文件或弄乱文件系统,即通过创建从您的 Web 根目录到您的“Web 根目录外的机密文件”目录的硬链接。防止这种情况归结为确保您的 PHP 配置尽可能严格,不允许在 webroot 内创建文件,最重要的是,确保 PHP 应用程序本身不受攻击。


推荐阅读