【发布时间】:2011-09-20 11:00:56
【问题描述】:
使用 .htaccess 密码保护目录是防止其文件被未经授权的用户看到的最佳方法吗?是否有任何替代方法可以保护目录的内容,同时仍然让经过身份验证的人可以访问它?
另外,难道不能有人试图强行进入,给服务器造成压力吗?
【问题讨论】:
使用 .htaccess 密码保护目录是防止其文件被未经授权的用户看到的最佳方法吗?是否有任何替代方法可以保护目录的内容,同时仍然让经过身份验证的人可以访问它?
另外,难道不能有人试图强行进入,给服务器造成压力吗?
【问题讨论】:
需要注意的几点:
在 .htaccess 中添加安全性始终可以在没有 .htaccess 的情况下通过在主配置(或虚拟主机配置)中使用 <Directory> 指令来完成。它会更快(如果您使用 AllowOverride None 完全删除对 .htaccess 的支持)并且您不会冒有人更改您的 .htaccess 的风险。
有几种方法可以在 .htaccess 文件中添加安全性,其中一种方法是使用带有 .htpasswd 文件的基本 HTTP 身份验证。这些 .htpasswd 文件不应位于 Web 目录根目录中。另一种可能性是使用HTTP Digest Authentification,但限制是非常旧的浏览器不支持它(如 IE6)。
我们通常会遇到HTTP Basic Authentification。这是一个非常弱的保护,仅仅是因为它的工作方式。在第一个请求被拒绝时,您的浏览器会要求您输入密码和登录名,并为请求的网络服务器记住此密码登录关联。然后,对于发送到此网络服务器的每个请求,直到您关闭浏览器登录名和密码都将添加到请求标头中,未加密。只需对字符串“Yourlogin:Yourpassword”应用 base64 编码,使其看起来像纯 ASCII7 字符串并防止编码问题。
因此,任何嗅探您请求的人(wifi 热点、中间人、本地网络、回声开关等)都会知道您的密码和登录信息。坏的。规则是“:
永远不要使用基本 HTTP 验证是否连接 不是 HTTPS (SSL)。
如果您的网络服务器完全使用 HTTPS 没问题(请参阅底部的编辑),明文/密码将通过 SSL 加密。
对于暴力破解问题(是的,有些人可以尝试暴力破解登录名/密码,除非您调整 mod_security module 来防止这种情况)Security Consideration of the htpasswd page 非常清楚:
使用 crypt() 算法时,请注意只有密码的前 8 个字符用于构成密码。如果提供的密码较长,多余的字符将被静默丢弃
和:
在 Windows 和 MPE 平台上,使用 htpasswd 加密的密码长度限制为不超过 255 个字符。较长的密码将被截断为 255 个字符。
所以对密码使用 SHA 编码 散列(即使它没有加盐)。
让经过身份验证的用户浏览目录内容的另一种方法是在应用程序中处理目录列表和文件上传(PHP、Tomcat 等),而不是使用 apache 自动列表。在安全性方面,自动列表模块 (mod_autoindex) 是您甚至不应该在正在运行的 apache 上使用的东西。
编辑
如果您只想通过 HTTP 身份验证保护某些 url,则不需要完整的 HTTPS 服务器。您真正需要的是所有这些受保护的 url 都应该在 https 中,如果不受保护的 url 在 http 域中,则不会使用身份验证标头,因为这是一个不同的域(以及身份验证标头由域发送)。所以你可以在这些 url 的 http 域中添加基本的重定向规则,可能是这样的:
RedirectMatch 301 ^/secure/(.*)$ https://www.example.com/secure/$1
【讨论】: