禁用 .htaccess 会提高安全性吗?

信息安全 网络服务器 阿帕奇 权限 WordPress
2021-09-11 04:18:19

我有一个新的 WordPress 网站,该网站已安装在非我管理的服务器上。它的管理员已经执行了一些规则以提高安全性,我并不完全了解它的全部内容,但它包括:

  • 将 apache 的www文件夹放在单独的noexec分区中
  • 以对文件夹具有只读访问权限的用户身份运行 apache
  • open_basedir 禁止访问 WP 结构之上的文件夹
  • wp-content/uploads/大多数文件夹和子文件夹(除了和其他几个)的权限(如果我没记错的话,是 640 或 740 )。每当需要安装新插件、应用更新或对文件进行更改时,脚本都会临时应用递归更宽松的权限。
  • Apache 忽略.htaccess文件。

我没有定义这些政策,我不知道它的功效。但是,最后一项(禁用 .htaccess)给我带来了至少两个问题:

  1. 阻止“漂亮的永久链接”工作(用户友好的 URL 重写)。
  2. 防止BulletProof 插件工作(基本上是 .htaccess 指令的集合,这些指令应该保护 WordPress 免受 XSS、RFI、CRLF、CSRF、Base64、代码注入和 SQL 注入黑客攻击,并防止访问可能提供的自述文件等文件WP 的版本、其他配置文件、php .ini 文件和目录列表)。

我的问题是:从安全角度来看,禁用 .htaccess 是否会带来一些优势,这可能证明失去上述几点是合理的?

4个回答

禁用.htaccess本身不会为您的网站提供任何额外的安全优势。正如@Xander 提到的那样,我看到禁用的主要原因.htaccess是性能(尽管我怀疑在许多情况下性能改进可以忽略不计)。

但是,从主机的角度来看,它可以提供一些安全优势,因为它可以帮助保护主机(以及盒子上的任何其他用户)免受您的侵害。如果您“未经培训”的用户错误地配置了其中的指令,.htaccess则可能会导致盒子上运行的其他东西出现问题。从这个意义上说,它还有助于防止您意外破坏您自己的网站。

现在,鉴于有更好的方法来处理这个问题,这是否具有任何实际价值,这是一个完全不同的问题。

除了@gowenfawr 提到的选项。您可以要求您的主机将您想要的配置指令.htaccess直接添加到您站点的服务器配置中。这将使他们能够确认配置不会导致安全隐患。

根据 Apache 手册“有两个原因”为什么.htaccess不应该使用文件:服务器性能服务器安全(为简洁起见,我没有在此处复制他们的广泛解释。)请参阅:何时(不)使用 .htaccess 文件

通常,除非您无权访问主服务器配置文件,否则您永远不应该使用 .htaccess 文件。例如,有一种普遍的误解,即用户身份验证应始终在 .htaccess 文件中进行。这根本不是那么回事。您可以将用户身份验证配置放在主服务器配置中,这实际上是首选方式。

此外

  1. 服务器性能本手册建议始终在服务器配置文件(或包含的配置文件)中进行更改。在您的情况下,主机可以轻松地将您需要进行的任何更改直接应用于服务器配置以确保安全。何时.htaccess允许服务器必须检查服务器上的所有目录以获取指令。一些包含数千个文件夹的臃肿博客和插件(如 TinyMCE)会显着降低数百个虚拟主机的服务器性能。

  2. 服务器安全- 禁用.htaccess为主机提供了对服务器配置的独占控制,因为.htaccess它毕竟用于覆盖在httpd.conf. AddType application/x-httpd-php .pdf如果有人恶意添加一行或没有考虑后果(大多数情况下,.htaccess文件可以由具有简单 ftp-only 访问权限的人直接写入服务器。在我从全球共享托管公司获得的许多不安全系统上,读/写访问权限被授予.htaccess文件可能驻留的 Web 根目录(和大多数子目录)。大多数“安全”的 CMS 系统允许上传PDF文件,而他们放弃php上传尝试。

应该怎么做?

  1. 理想情况下,主机会授予一些覆盖。这可能使一些事情,如mod_rewritemod_authmod_deflate,和mod_gzip
  2. 主机应将上传到服务器的内容限制为SFTPFTP over SSH(如果他们担心有人从明文中提取密码和登录信息。)
  3. 主机应该只授予overrides需要被覆盖的东西。(自定义 404 错误、mod_rewrite指令等)这是不言而喻的,但由于文件的性质.htaccess及其覆盖httpd.conf文件的能力,主机不应在允许的范围内提供所有内容的覆盖
  4. 主机应该实现类似IPtables 的东西来处理蛮力尝试。
  5. 主机可以allow overrides在不是的自定义文件中.htaccess(他们可以使用AccessFileName重命名文件),这意味着他们可以包含所有文件.accesscfg或自动脚本不会在注入时写入的内容。如果服务器不寻找,.htaccess那么如果有人要添加一个这样命名的文件,则不会执行自动有效负载。
  6. 房东应该清楚地说明他们为什么要做他们正在做的事情以及他们做了什么,以免浪费客户的时间和自己的资源来解决他们创建的问题的故障单。

为什么主机要阻止.htaccess 偏执似乎是一个很好的理由,但是在日常stackoverflow.com看到约10-20新[懒]问题后.htaccess,并mod_rewrite与人造成500 internal server errors永不落幕的重定向序列; 并且第一手重写了.htaccess从过去的开发团队(“专业人士”)继承的几个执行得很差的 100 多行文件,以查看单个虚拟主机的 300-500% 性能提升,我可以理解为什么在更大的范围内这看起来更像合乎逻辑的事情。这不是每个人的答案,但是当虚拟集群中可能有 300 多个主机并且他们试图评估整体性能时,很难判断所有重复的流量是否都是坏的.htaccess 依次具有多个重定向的文件,或合法攻击。

此外,大多数主机都削减了支持方面的预算(有些主机现在需要额外收费,甚至在托管专用主机计划中也是如此),因此当有人因为他们的vhostVPS性能不佳而打电话时,主机必须开始在集群中或在框来确定所有资源的去向。这可能是同时有 20 位客户提出相同的投诉。

如果它是我的服务器,我会要求管理员在您的虚拟主机中进行一些覆盖,并向他们展示您在做什么。向他们展示为什么不允许您进行编辑对他们来说是个坏主意。他们甚至可能会提议使您的虚拟主机中的更改永久化,这将加快整个体验。停止服务器性能的许多重复问题(没有那么多安全性)可能是一种下意识的反应。

如果这是一个真正的安全问题,他们可能会完全阻止 Wordpress。另一方面,请记住将您的管理员帐户重命名为其他名称。

作为htshells项目的作者,我认为在这里插话可能是合适的。作为系统管理员和渗透测试人员,我的专业意见是应该禁用.htaccess,但安全性和性能都不是主要原因;

似乎一些响应集中在覆盖现有.htaccess文件的能力上,这有点缺陷。.htaccess这通常是在某处创建文件的问题。例如,假设您允许将文件上传到您的网站,并且应用程序正确过滤了文件类型,但错过了该.htaccess文件。稍后上传文件,您可以远程执行代码。这与上传文件仅略有不同PHP,但动态重新配置部分 Apache 的能力对攻击者来说很有价值。

由于没有理由不能将指令放入 Apache 配置中,因此在生产环境中.htaccess应该不需要文件。.htaccess尽管我认为“我的AllowOverride指令应该是什么样的?” .htaccess如果您必须支持文件(即:共享主机),可能是一个更好的问题。

禁用 .htaccess 确实提供了一些保护。如果攻击者能够以某种方式修改 Web 根目录中的 .htaccess 文件,他们就可以修改服务器配置,例如添加一个处理程序以便 PHP 处理 .txt 文件。如果您的服务器允许他们上传 .txt 文件而不是 .php 文件,那么,他们刚刚找到了一种引导自己执行代码的方法。

从您的主机的角度来看,如果他为 100 人托管,其中 95 人根本不需要 .htaccess,其中 4 人想用它做闪闪发光的东西。最多 100 个(你)中的 1 个会想用它做任何事情来提高你的安全性。那么丢失 .htaccess 是否合理?不适合你,但从数字上看,这对主人来说确实有意义。

因此,您有三个选择:

  1. 说服你的主人为你破例
  2. 接受房东对您施加的限制
  3. 找一个新主机,或者运行你自己的主机,两者都可能比你当前的设置更贵

编辑 6/3:

正如我对使用 .htaccess 闯入 cgi-bin 的描述(在下面的评论中)被描述为“绝对没有内容”,我提供了以下链接,指向体现这种确切攻击路线的实际漏洞利用。

通过 .htaccess 攻击 Web 服务器

htshells 项目页面

(事实上​​,它有点巧妙地更进一步;它映射 .htaccess 文件本身以执行 cgi-bin 并将恶意代码嵌入到正在重写的文件中以允许恶意代码执行。多么美味的元!)

所以,我很抱歉,但是是的,.htaccess 可以被滥用,正如我所描述的那样;过去了,以后会了。桑塔亚娜不仅仅是弹吉他的老家伙。如果您还需要更多的情况来禁用 .htaccess,它们并不难找到:

谷歌“htaccess 被黑”