gpt4 book ai didi

apache - 正确使用.htpasswd

转载 作者:行者123 更新时间:2023-12-03 22:46:51 28 4
gpt4 key购买 nike

假设站点较小(页面数少于5个),.htaccess.htpassword的正确用法是什么?我最近观看了a tutorial from Nettuts+给出此示例代码的地方:

.htaccess

AuthName "Login title"
AuthType Basic
AuthUserFile /path/to/.htpasswd
require valid-user


.htpasswd(使用 htpasswd -c <file> <username>命令创建)

username:encrypted-version-of-password


我还对提供的实际安全级别感到好奇:可以轻松地绕过它吗?如果默认情况下Apache不允许用户直接访问两个文件中的任何一个,那么他们是否需要位于公共目录之外?有速度影响吗?

最佳答案

这提供什么安全等级?

.htpasswd本身并不能提供太多安全性。也就是说,它提供了登录机制,如果没有适当的凭据,Apache将不会响应,但是除非另行配置,否则有关交换的任何内容都不会被加密(甚至混淆)。例如,通过Wireshark监听GET请求,可以很好地了解客户端发送的所有标头,包括:

Authorization: Basic d3BhbG1lcjp0ZXN0dGVzdA==


d3BhbG1lcjp0ZXN0dGVzdA==”只是“ wpalmer:testtest”的base64编码形式。如今,黑客(或更可能是病毒)可以坐在公共WiFi连接上,并记录任何包含 Authorization:的请求,以供日后阅读。通常,即使您通过有线或安全的WiFi端到端,通过未加密的HTTP连接发送任何身份验证信息也被认为是一个坏主意。例如,如果您将客户数据,付款信息等存储在 .htpasswd锁后面,它将不符合 PCI Compliance的要求。

将https添加到组合中,就可以完全消除该特定问题,但是...

Apache httpd实施的 .htpasswd身份验证不提供任何形式的速率限制或蛮力保护。您可以尝试进行许多同时尝试输入密码的尝试,就像Apache愿意提供同时进行的页面一样,Apache会尽可能地以成功/失败作为响应。您可以使用类似 Fail2Ban之类的方法来限制在阻止客户端与服务器通信之前可以进行的失败尝试次数,但这不一定能提供针对僵尸网络的任何有用保护,僵尸网络可能会自动针对成千上万的服务器唯一地址。这可能导致以下决定:“当由于多个客户端的故障导致整个帐户被锁定时,我是否容易受到僵尸网络的密码尝试攻击,还是容易遭受拒绝服务攻击?”

可以通过在 .htaccess文件中添加基于IP的限制来限制这些攻击角度,从而仅允许来自某些地址的连接。根据您的操作方式,这可能会带来不便,但这也会严重限制您可能受到的威胁的类型。仍然存在特定针对您站点的人或部分网络基础架构本身被感染的风险。根据您要保护的内容类型,这可能“足够好”。这种限制的一个例子是:

Order deny,allow
Deny from all
Allow from 127.0.0.1


简而言之,这意味着“仅允许来自本地主机的连接”。逐行,表示:


Order deny,allow定义处理规则的顺序,最后匹配优先。
Deny from all首先假定所有客户端均被拒绝
Allow from 127.0.0.1如果客户端具有IP 127.0.0.1,则允许


在某种程度上,基于IP的限制也可以保护您到HTTPS被视为可选的程度。攻击者/病毒仍然可以看到您的凭据,但使他们更难在页面本身上使用这些凭据。同样,这将不符合PCI标准,也不适合“重要”信息,但是在某些情况下,这可能被认为“足够好”。请注意,许多人会在多个站点上重复使用凭据,因此,即使站点本身受到保护,通常也无法保护登录详细信息对用户来说是非常危险的。

最后, .htaccess文件本身有点责任。查看对“他们是否需要在公共目录之外?”的答复。有关更多详细信息。

可以轻易绕开吗?

不需要。没有理由期望服务器在正确配置后永远不会要求登录详细信息来访问受保护的内容。尽管HTTP Basic身份验证存在缺陷,但Apache httpd非常强大,并且是世界上经过最彻底测试的软件之一。如果您告诉Apache访问某些内容需要HTTP基本身份验证,则将需要它。

如果默认情况下Apache不允许用户直接访问两个文件中的任何一个,那么他们是否需要位于公共目录之外?

这有两点。首先,Apache并不默认禁止访问这两个文件。 Apache httpd的许多发行版都包含初始配置,该配置会阻止(使用“拒绝所有人”规则)根据发行版访问 .htaccess / .htpasswd文件, .ht*文件或 .*文件。这很常见,但是有很多原因可能并非如此。如果尚未阻止这些文件,则可以自己添加规则以阻止它们:

<FilesMatch "^.(htaccess|htpasswd)$">
Order Allow,Deny
Deny from all
</FilesMatch>


其次,应该指出的是, .htaccess文件的工作方式是在它们所在的目录匹配时进行处理。也就是说: .htpasswd可能在其他位置,但是 .htaccess需要在同一目录中。也就是说,请参阅“速度影响”部分以获取更多详细信息。

因此,由于可以很容易地阻止它们,为什么将 .htpasswd保留在公共目录之外?因为会发生错误,所以 .htpasswd文件是一个很大的责任。即使使用HTTPS,暴露 .htpasswd文件也意味着可以通过蛮力攻击轻松破解密码。如今,消费级GPU每秒可以进行数百万次密码猜测。这甚至可以使“强”密码在相对较短的时间内丢失。同样,此参数通常仅适用于有针对性的攻击,但事实仍然是,如果攻击者拥有您的 .htpasswd文件并希望访问您的系统,那么如今,他们可能能够轻松地做到这一点。有关事物状态的相对近期(2012年4月)概述,请参见《编码恐怖》中的 Speed Hashing

考虑到这一点,意外(临时)公开您的 .htaccess文件的可能性值得将其移动到httpd寻找要提供内容的位置时甚至不应该查看的位置。是的,仍然存在一些配置更改,如果它是“一级升级”而不是“在公共目录中”,则可能会将其公开,但是这些更改不太可能偶然发生。

有速度影响吗?

一些。

首先,使用 .htaccess文件确实会减慢速度。更具体地说, AllowOverride all指令会导致很多潜在的速度下降。这将导致Apache在每个目录以及目录的每个父目录中查找.htaccess文件(直到 DocumentRoot为止)。这意味着针对每个请求查询文件系统中的文件(或文件更新)。与可能永远不会访问文件系统的选择相比,这是一个很大的不同。

那么,为什么 .htaccess根本存在?有许多原因可能使它“值得”:


根据您的服务器负载,您可能永远不会注意到差异。您的服务器真的需要从每个请求中挤出最后一毫秒吗?如果没有,那就不用担心。与往常一样,不必担心估计和预测。剖析您的现实情况,看看是否有作用。
可以在不重新启动服务器的情况下修改 .htaccess。实际上,这就是让它变慢的原因-Apache在每个请求中检查更改或 .htaccess文件的存在,因此更改将立即应用。
.htaccess中的错误将删除目录,而不是服务器。这使得它比更改 httpd.conf文件的责任少得多。
即使您仅具有对单个目录的写访问权限,也可以修改 .htaccess。这使其非常适合共享主机环境。完全不需要访问 httpd.conf或重新启动服务器。
.htaccess可以将访问规则保留在将要生效的文件旁边。这可以使它们更容易找到,并且可以使事情井井有条。


即使考虑以上所有内容,也不想使用 .htaccess吗?适用于 .htaccess的任何规则都可以直接添加到 httpd.conf或包含的文件中。

.htpasswd呢?这取决于您拥有多少用户。它是基于文件的,在实现方面几乎是最低限度的。从 The docs for httpd 2.2


由于指定了基本身份验证的方式,您的
每次您要求输入用户名和密码时,都必须验证
服务器上的文档。即使您正在重新加载相同的内容
页面,以及页面上的每个图像(如果它们来自受保护的
目录)。可以想象,这会使速度变慢。的
它使事情变慢的数量与
密码文件,因为它必须打开该文件,然后在
用户列表,直到获得您的名字为止。它必须做到这一点
页面加载的时间。

这样的结果是,实际上有多少个限制
用户可以放入一个密码文件。此限制将根据
特定服务器计算机的性能,但是您可以
一旦您获得数百项以上的数据,就有望看到速度下降,并且
可能希望当时考虑使用其他身份验证方法。


简而言之, .htpasswd很慢。如果只有少数需要认证的用户,您将永远不会注意到,但这是另一个考虑因素。

摘要

使用 .htpasswd保护管理员部分并非在所有情况下都是理想的。鉴于其简单性,如果安全性和性能不是最优先考虑的事项,则可能值得承担这些风险和问题。在许多情况下,只需稍作调整,就可以认为它“足够好”。构成“足够好”是您做出的判断要求。

关于apache - 正确使用.htpasswd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12291080/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com