protect password online httpd htpassword htpasswd htaccess generador .htaccess password-protection

.htaccess - password - htpasswd



La contraseña protege una URL específica (7)

¿Qué hay de redirigir al usuario a una subcarpeta protegida con contraseña?

.htaccess

RewriteCond %{HTTP_COOKIE} !BadHorsie=secret_cookie_key RewriteRule ^(pretty/url)$ /protected/login.php?url=$1 [R=307,L]

protegido / .htaccess

AuthUserFile /usr/www/{YOUR_PATH}/protected/.htpasswd AuthGroupFile /dev/null AuthName "Protected" AuthType Basic require user BadHorsie

protected / .htpasswd

BadHorsie:$apr1$fFbaaVdF$Q5ql58g7R4qlpMUDb/5A0/

protected / login.php

<?php if (isset($_GET[''url'']) && $_GET[''url''] && $_GET[''url''][0] != ''/'' && strpos($_GET[''url''], ''//'') === false) { setcookie(''BadHorsie'', ''secret_cookie_key'', 0, ''/''); header(''Location: /'' . $_GET[''url''], true, 307); exit; } ?>

Lo que pasa

  1. El usuario solicita example.com/pretty/url
  2. 307 redirigir a example.com/protected/login.php?url=pretty/url
  3. iniciar sesión
  4. en caso de éxito: el usuario obtiene la cookie de sesión con la clave secreta
  5. 307 redirigir a example.com/pretty/url
  6. El usuario obtiene contenido secreto

Nota: Por supuesto, el mecanismo de "cookie de sesión y redireccionamiento de retorno" es totalmente opcional. Finalmente, puede protected/login.php su contenido secreto directamente a través de protected/login.php . Me mostré de esta manera solo por inspiración.

Opcional: No use PHP y configure la cookie a través de .htaccess.

El sitio está en alojamiento compartido. Necesito proteger con contraseña una sola URL.

http://www.example.com/pretty/url

Obviamente, esa no es una ruta de archivo física que estoy tratando de proteger, es solo esa URL en particular.

Cualquier solución rápida con .htaccess?


Como Rick dijo en un comentario que ninguna respuesta en esta pregunta funciona, aquí está el fragmento que uso:

AuthName "Protected Area" AuthType Basic AuthUserFile /path/to/your/.htpasswd AuthGroupFile /dev/null SetEnvIf Request_URI .* noauth SetEnvIf Request_URI the_uri_you_want_to_protect !noauth SetEnvIf Request_URI another_uri !noauth SetEnvIf Request_URI add_as_many_as_you_want !noauth <RequireAny> Require env noauth Require valid-user </RequireAny>

Si necesita soporte para Apache 2.2 y Apache 2.4 (aparentemente hay configuraciones donde ambas versiones se ejecutan en paralelo ...):

AuthName "Protected Area" AuthType Basic AuthUserFile /path/to/your/.htpasswd AuthGroupFile /dev/null SetEnvIf Request_URI .* noauth SetEnvIf Request_URI the_uri_you_want_to_protect !noauth SetEnvIf Request_URI another_uri !noauth SetEnvIf Request_URI add_as_many_as_you_want !noauth <IfModule mod_authz_core.c> <RequireAny> Require env noauth Require valid-user </RequireAny> </IfModule> <IfModule !mod_authz_core.c> Order Deny,Allow Deny from all Satisfy any Require valid-user Allow from env=noauth </IfModule>

El código para Apache 2.2 está tomado de Jon Lin .


Debería poder hacer esto usando la combinación de mod_env y Satisfy any directiva. Puede usar SetEnvIf para verificar contra Request_URI , incluso si no es una ruta física. Luego puede verificar si la variable está configurada en una declaración de Allow . Por lo tanto, debe iniciar sesión con la contraseña o Allow permite ingresar sin contraseña:

# Do the regex check against the URI here, if match, set the "require_auth" var SetEnvIf Request_URI ^/pretty/url require_auth=true # Auth stuff AuthUserFile /var/www/htpasswd AuthName "Password Protected" AuthType Basic # Setup a deny/allow Order Deny,Allow # Deny from everyone Deny from all # except if either of these are satisfied Satisfy any # 1. a valid authenticated user Require valid-user # or 2. the "require_auth" var is NOT set Allow from env=!require_auth


Lamentablemente no puedo comentar la respuesta @ jon-lin. Entonces, creo una nueva respuesta. Mi solución adaptada en un entorno apache 2.4 es:

# # password protect /pretty/url URIs # AuthType Basic AuthName ''Authentication required'' AuthUserFile /path/to/.htpasswd # Restrict access to some urls SetEnvIf Request_URI ^/pretty/url auth=1 <RequireAll> # require the auth variable to be set Require env auth # require an valid-user Require valid-user </RequireAll>


Puede usar <LocationMatch> o simplemente <Location> dentro de su directiva <VirtualHost> para hacer esto (suponiendo que tenga acceso a su httpd.conf / vhost.conf - alternativamente, puede poner algo similar en .htaccess en su documento raíz si tienes que configurar tu sitio de esa manera).

Por ejemplo:

<VirtualHost *:80> ServerName www.example.com DocumentRoot /var/www/blabla # Other usual vhost configuration here <Location /pretty/url> AuthUserFile /path/to/.htpasswd AuthGroupFile /dev/null AuthName "Password Protected" AuthType Basic require valid-user </Location> </VirtualHost>

Puede encontrar <LocationMatch> más útil si quiere hacer coincidir una expresión regular con su bonita URL. La documentación está here .


Todas las soluciones proporcionadas no funcionaron para mí. Me di cuenta de que las siguientes directivas hacen el truco:

SetEnvIf Request_URI ^/page-url auth=1 AuthName "Please login" AuthType Basic AuthUserFile "/www/live.example.com/files/html/.htpasswd" # first, allow everybody Order Allow,Deny Satisfy any Allow from all Require valid-user # then, deny only if required Deny from env=auth


la solución de arriba está demasiado ocupada y mal un poco ... Voy por la simplicidad y la claridad como esta

<Files "protected.html"> AuthName "Username and password required" AuthUserFile /home/fullpath/.htpasswd Require valid-user AuthType Basic </Files>

Lo anterior debe colocarse en su archivo htaccess donde "protected.html" es el archivo que desea proteger (puede ser cualquier cosa que desee, por ejemplo myphoto.jpg o document.zip, simplemente renómbrelo a su preferencia). AuthUserFile es la ruta completa a su archivo de contraseña. Estás listo.

Aunque es posible que deba asegurarse de que se establezcan los requisitos previos para esto. AllowOverride y AuthConfig son necesarios en las configuraciones de la etiqueta del directorio Apache para que el código funcione, pero normalmente está preconfigurado, por lo que debe estar seguro y bien a menos que esté haciendo su propia compilación personalizada.