.htaccess basic auth por host virtual?
-
27-10-2019 - |
Pregunta
Me preguntaba si era posible la instalación de un condicional http basic auth requisito basado en el host virtual URL en una .archivo htaccess.
Por ejemplo, lo que quiero hacer es tener mysite.com y test.mysite.com ejecutar fuera de la misma base de código en el mismo directorio pero proteger con contraseña test.mysite.com.Sería la instalación de esta manera, por lo que no necesitaría de la rama de mi código ya que mi código de la aplicación puede ver que vhost/url es ser atendidas desde y elegir la base de datos para ofrecer contenido de.
Solución
Usted puede ordenar de parche esta utilizando mod_setenvif
junto con el mod_auth
los módulos.El uso de la SetEnvIfNoCase
directiva para establecer el host que está protegido con contraseña.Usted necesitará un par de extra directivas para satisfacer acceso:
# Check for the hostname here
SetEnvIfNoCase HOST ^test\.mysite\.com\.?(:80)?$ PROTECTED_HOST
A continuación, dentro de la Directory
bloque (o sólo en abierto) tiene su auth cosas de instalación, algo como esto:
AuthUserFile /var/www/test.mysite.com/htpasswd
AuthType Basic
AuthName "Password Protected"
Ahora para requerir/satisfacer cosas:
Order Deny,Allow
Satisfy any
Deny from all
Require valid-user
Allow from env=!PROTECTED_HOST
Esto hará que cualquier host que no coincide ^test\.mysite\.com\.?(:80)?$
tendrá acceso, sin necesidad de auth (Allow from env=!PROTECTED_HOST
) pero de lo contrario, necesitamos un usuario válido (Require valid-user
).El Satisfy any
se asegura de que sólo tenemos uno de los 2, el Permitir o Exigir.
Otros consejos
Tuve problemas para implementar la solución de Jon:
Aunque estoy bastante familiarizado con Apache conf y las expresiones regulares, la autenticación siempre se activa.A partir de un análisis rápido, parecía que la línea Allow from env=!PROTECTED_HOST
no se activó.
Pero encontré otra solución que en realidad me parece más segura:
Creé dos hosts virtuales para los dos dominios que apuntan a la misma raíz del documento (que por cierto está totalmente permitido).En uno de los vhosts agregué las directivas para la autenticación básica (directamente en el bloque de directivas vhost).
Funciona de maravilla.Y tengo una mejor sensación de que esto es realmente seguro: no hay riesgo de pasar por alto ningún detalle en el patrón de expresiones regulares que abriría las puertas a los intrusos.
<VirtualHost *:80>
ServerName www.mysite.com
DocumentRoot "/path/to/common/doc/root"
<Directory "/path/to/common/doc/root">
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerName protected.mysite.com
DocumentRoot "/path/to/common/doc/root"
<Directory "/path/to/common/doc/root">
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
AuthUserFile /path/to/htpasswd
AuthName "Password please"
AuthType Basic
Require valid-user
</Directory>
</VirtualHost>
Aquí hay una solución similar a la que propuso Jon Lin, pero usando RewriteCond
para verificar el nombre del host:
RewriteEngine On
RewriteCond %{HTTP_HOST} =protected.hostname.com
RewriteRule ^.*$ - [E=DENY:1]
AuthUserFile /path/to/htpasswd
AuthName "Password please"
AuthType Basic
Order Deny,Allow
Satisfy any
Deny from all
Require valid-user
Allow from env=!DENY