不要覆盖域中的htpasswd

时间:2014-08-08 09:18:40

标签: .htaccess .htpasswd

我有一个域(也是文件夹结构)* .dev.xxx。 我需要制作一个htpasswd,它需要该域上每个站点的凭据。

我的.htaccess

AuthType Basic
AuthName "test"
AuthUserFile /var/www/dev/.htpasswd
Require valid-user

但是当子域有自己的htaccess时,它会覆盖这个子域,并且它可以在未经授权的情况下工作。

有没有办法强迫它授权?

感谢您的回答。

2 个答案:

答案 0 :(得分:1)

您的结构可能如下所示。

/.
/..
/sub
/web
/log

只需将.htaccess放在subweb的父文件夹中。

答案 1 :(得分:1)

单一登录跨子域

浏览器会将不同的子域视为完全不同的身份验证范围。出于安全原因,这是为了防止通过IP /域欺骗进行密码网络钓鱼。因此,通过.htaccess 无法做到这一点,除了之前提到的M1K1O:

  

只需将.htaccess放在sub和web的父文件夹中即可。

...然后防止并排除子文件夹中的任何.htaccess auth声明。

但是,如果你非常小心,可能有一种服务器端方法在apache主机中处理它。

使用mod_auth_digest

<VirtualHost [your-ip]:80>
    ServerAdmin webmaster@domain.com
    DocumentRoot /var/www/dev/
    ServerName www.dev.domain.com
    ServerAlias *.dev.domain.com
    ...
    # Add to any your virtual host entries:
    <Location /var/www/dev>
        AuthName "test"
        AuthType Digest
        AuthDigestAlgorithm MD5
        AuthDigestDomain / http://www.dev.domain.com/ http://other.dev.domain.com/
        AuthDigestQop auth
        AuthDigestProvider file
        AuthUserFile /var/www/dev/.htpasswd
    </Location>
</VirtualHost>

此方法的一个主要缺点是AuthDigestDomain不支持任何通配符。即:必须显式声明每个预期的子域,而不是使用http://*.dev.domain.com/

使用mod_session编写自己的auth处理程序。

这条路线是我过去考虑过的路线,但由于安全隐患很长,尚未深入研究。