.htaccess密码保护有多安全?

时间:2011-06-22 14:28:49

标签: security apache .htaccess

使用.htaccess保护目录的密码是阻止未经授权用户查看其文件的最佳方法吗?有没有其他方法可以保护目录的内容,同时仍然可以让经过身份验证的人可以查看它?

另外,有人试图强行进入,造成服务器压力吗?

1 个答案:

答案 0 :(得分:64)

需要注意几点:

通过在主配置(或虚拟主机配置)中使用<Directory>指令,始终可以在没有.htaccess的情况下在.htaccess中添加安全性。它会更快(如果您使用AllowOverride None删除.htaccess的完全支持)并且您不会有人改变.htaccess的风险。

有几种方法可以在.htaccess文件中添加安全性,其中一种方法是使用带有.htpasswd文件的基本HTTP身份验证。这些.htpasswd文件不应位于Web目录根目录中。另一种可能性是使用HTTP Digest Authentification,限制是非常旧的浏览器不支持它(如IE6)。

我们经常遇到HTTP Basic Authentification。这是一种非常弱的保护,仅仅是因为它的工作方式。在第一次请求时,您被拒绝,然后您的浏览器会要求您输入密码并登录,并记住所请求的网络服务器的密码登录关联。然后,对于发送到此网络服务器的每个请求,直到您关闭浏览器,登录名和密码将添加到请求标题未加密中。只有一个base64编码应用于字符串'Yourlogin:Yourpassword',使其看起来像纯ASCII字符串并防止编码问题。

所以任何人嗅探你的请求(wifi热点,中间人,本地网络,回音开关等)都会知道你的密码和登录。坏。规则是“:

  

永远不会使用Basic HTTP   如果连接则认证   不是HTTPS(SSL)。

如果您的网络服务器完全没有HTTPS问题(请参见底部的编辑),则明文/密码将通过SSL加密。

对于暴力问题(是的,有些人可以尝试强制登录/密码,除非你调整mod_security module以防止这种情况),Security Consideration of the htpasswd page非常明确:

  

使用crypt()算法时,请注意只使用密码的前8个字符来形成密码。如果提供的密码较长,则会以静默方式丢弃多余的字符

  

在Windows和MPE平台上,使用htpasswd加密的密码长度不得超过255个字符。较长的密码将被截断为255个字符。

因此,对密码使用SHA encoding 哈希(即使它没有被腌制)。

让经过身份验证的用户浏览目录内容的另一种方法是处理应用程序中的目录列表和文件上载(PHP,Tomcat等),而不是使用apache自动列表。在安全性方面,自动列表模块(mod_autoindex)是您在运行的Apache上不应该拥有的。

修改

如果您只想使用HTTP身份验证来保护某些网址,则不需要完整的HTTPS服务器。您真正需要的是所有这些受保护的网址应该是https ,如果未受保护的网址在http域中,则不会使用身份验证标头,因为这是一个不同的域(并且验证)标头由域发送)。因此,您可以在http域中为这些URL添加基本重定向规则,可能是这样的:

RedirectMatch 301 ^/secure/(.*)$ https://www.example.com/secure/$1