.htaccess密码保护有多安全?

使用.htaccess密码保护目录是防止未经授权的用户看到其文件的最好方法吗? 有没有其他方法可以保护目录的内容,同时还可以让经过身份validation的用户查看它?

另外,有人不能试图暴力破解,造成服务器的压力?

有几件事要注意:

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

有几种在.htaccess文件中添加安全性的方法,其中一种方法是使用Basic HTTP Authentification和.htpasswd文件。 这些.htpasswd文件不应该在Web目录的根目录下。 另一种可能是使用HTTP摘要鉴别 ,限制了很老的浏览器将不支持它(如IE6)。

我们通常会遇到HTTP基本身份validation。 这是一个非常薄弱的​​保护,只是因为它的工作方式。 在第一个请求被拒绝的时候,你的浏览器要求你input密码并login,并且记住这个请求的web服务器的密码login关联。 然后,对于发送到此Web服务器的每个请求,直到您closures浏览器,login名和密码将被添加到请求标题中 ,并且未encryption 。 只需要在string“Yourlogin:Yourpassword”上应用base64编码,使其看起来像纯ASCII7string,并防止编码问题。

所以任何人嗅探你的请求(WiFi热点,中间的人,本地networking,回声开关等)将知道你的密码和login。 坏。 规则是“:

如果连接不是HTTPS(SSL),则永远不要使用基本HTTP身份validation。

如果您的Web服务器在HTTPS中完全没有问题(请参阅底部的编辑),则明文/密码将通过SSL进行encryption。

对于暴力问题(是的,有些人可以试图强制login/密码,除非你调整一个mod_security模块,以防止这种情况) ,htpasswd页面的安全考虑是非常明确的:

使用crypt()algorithm时,请注意,只有密码的前8个字符才能用于形成密码。 如果提供的密码更长,多余的字符将被默默丢弃

和:

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

因此,对密码使用SHA 编码哈希(即使它不是盐)。

让authentication用户浏览目录内容的另一种方法是处理应用程序 (PHP,Tomcat等)中的目录列表和文件上载 ,而不是使用apache自动列表。 就安全性而言,自动列表模块(mod_autoindex)是您在运行apache时甚至不应该拥有的东西。

编辑

如果您只想通过HTTPauthentication来保护一些URL,则不需要完整的HTTPS服务器。 你真正需要的是,所有这些受保护的url应该在https中 ,如果不受保护的url在http域中,authentication头将不会被使用,因为这是不同的域(并且authentication头由域发送)。 所以你可以在http域中为这些url添加基本的redirect规则,也许是这样的:

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