Foros del Web » Administración de Sistemas » Apache »

Protección con fichero .htaccess

Estas en el tema de Protección con fichero .htaccess en el foro de Apache en Foros del Web. Buenas. He protegido con usuario y contraseña una carpeta en mi servidor mediante el uso del fichero .htaccess. Digamos que la ruta es /var/www/usuario y ...
  #1 (permalink)  
Antiguo 19/12/2013, 06:33
Avatar de empardopo  
Fecha de Ingreso: abril-2004
Mensajes: 73
Antigüedad: 20 años, 1 mes
Puntos: 0
Protección con fichero .htaccess

Buenas.

He protegido con usuario y contraseña una carpeta en mi servidor mediante el uso del fichero .htaccess.
Digamos que la ruta es /var/www/usuario y el contenido del fichero .htaccess es el siguiente
Código:
AuthName "Solo usuarios autorizados"
AuthType Basic
require user usuario
AuthUserFile /var/www/usuario/.htpasswd
AuthGroupFile /www.null
ErrorDocument 401 /var/www/usuario/error401.php
ErrorDocument 403 /var/www/usuario/error401.php
El caso es que quiero capturar la IP y fecha en la que alguién accede. Tengo dos opciones que ponga usuario y password correctos o bien que pulsen en el botón cancelar.
Cuando pulsan en el botón cancelar (no sé si me equivoco) aparece el error 401 en el título de ahí que hay intentado controlar dicho error con la instrucción ErrorDocument.
El contenido del fichero error401.php (lo uso también para el 403) es el siguiente

Código:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin título</title>
</head>

<body>
<img src="/Pictures/chuck-norris-2.jpg" width="926" height="1070" />
<?php
$ip = $_SERVER['REMOTE_ADDR']; //IP
$meses = array('enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre'); //Meses
$nombre = 'logs'; //Nombre de archivo
$dia = date('d'); //Dia
$mes = date('m') - 1; //Mes
$ano = date('Y'); //Año
$hora = date('h:i:s'); //Hora
$file = fopen($nombre.'.txt', 'a+'); //Abrimos archivo
fwrite($file,  'La IP '.$ip.' accedio el '.$dia.' de '.$meses[$mes].' del '.$ano.' a las '.$hora."\r\n"); //Guardamos información
fclose($file);//Cerramos archivo
?>
</body>
</html>
Bueno, simplemente se trata de mostrar una imagen en pantalla y de que se cree un fichero de texto con la ip y la fecha. Esto último es una prueba antes de cambiarlo para que se introduzca en una base de datos (es por aprender).

El tema es que siempre obtengo el siguiente error
Cita:
Authorization Required

This server could not verify that you are authorized to access the document requested. Either you supplied the wrong credentials (e.g., bad password), or your browser doesn't understand how to supply the credentials required.

Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.
¿Se os ocurre que puede estar mal?

Muchas gracias por adelantado
  #2 (permalink)  
Antiguo 19/12/2013, 08:36
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 10 años, 9 meses
Puntos: 578
Respuesta: Protección con fichero .htaccess

Cita:
/var/www/usuario/error401.php
Las rutas relativas comienzan de DocumentRoot, que viene a ser la parte pública de la web... Por lo tanto lo que está en negrita sobra.

Cita:
require user usuario
Reemplázalo por Require valid-user.

Creo que eso es todo. Prueba a ver si funciona.
  #3 (permalink)  
Antiguo 19/12/2013, 11:48
Avatar de empardopo  
Fecha de Ingreso: abril-2004
Mensajes: 73
Antigüedad: 20 años, 1 mes
Puntos: 0
Respuesta: Protección con fichero .htaccess

Muchísimas gracias.
Creo que he comprendido algo lo del Document Root y ahora ha funcionado; al menos cuando pulso sobre el botón Cancel me muestra la imagen que quería.
No había tampoco caido en el detalle de que cancelando se supone que no tengo acceso a lo que haya en el directorio protegido así que lo que he hecho es crearme un segundo directorio donde he metido la foto que quería mostrar.

Ahora el problema que tengo es que no me escribe nada en el fichero log; ¿esta mal el código php?

Código:
<?php
define('LOGINS_LOG','/control/accesos.log');

$ip = $_SERVER['REMOTE_ADDR']; //IP
$meses = array('enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre'); //Meses
$nombre = 'logs'; //Nombre de archivo
$dia = date('d'); //Dia
$mes = date('m') - 1; //Mes
$ano = date('Y'); //Año
$hora = date('h:i:s'); //Hora
$file = fopen('LOGINS_LOG', 'a+');
fwrite($file,  'La IP '.$ip.' accedio el '.$dia.' de '.$meses[$mes].' del '.$ano.' a las '.$hora."\r\n"); //Guardamos información
fwrite('/sclaros-control/accesos.log','hola');
fclose($file);//Cerramos archivo
?>
He probado incluso con otra instrucción fwrite escribiendo un hola y nada de nada.


Otra duda que me surge es la siguiente ...
Si pulso el botón de Cancelar cuando me está preguntando el usuario y la contraseña lo controlo con ErrorDocument 401 pero ¿es posible controlar si mete un usuario y password erróneas y pulsa en Aceptar?


Muchas gracias

Última edición por empardopo; 19/12/2013 a las 12:19
  #4 (permalink)  
Antiguo 19/12/2013, 13:43
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 10 años, 9 meses
Puntos: 578
Respuesta: Protección con fichero .htaccess

Bueno, ya que estamos

Cita:
$file = fopen(LOGINS_LOG, 'a+');
Las constantes van SIN COMILLAS.

Respecto a la última pregunta, si el usuario introduce una contraseña inválida de igual forma le dará un error 401 y al actualizar volverá a salir la ventana.
  #5 (permalink)  
Antiguo 20/12/2013, 02:54
Avatar de empardopo  
Fecha de Ingreso: abril-2004
Mensajes: 73
Antigüedad: 20 años, 1 mes
Puntos: 0
Respuesta: Protección con fichero .htaccess

Cita:
Iniciado por PHPeros Ver Mensaje
Bueno, ya que estamos



Las constantes van SIN COMILLAS.

Respecto a la última pregunta, si el usuario introduce una contraseña inválida de igual forma le dará un error 401 y al actualizar volverá a salir la ventana.
Muchísimas gracias.
He quitado las comillas pero sigue sin escribir en el fichero que he definido como fichero log.

Con respecto a lo del error.
Resulta que si le doy al botón en Aceptar metiendo usuario-password inválido o dejándolo en blanco resulta que me lo controla escribiendo en la base de datos osea que parece que controla el error 401 pero en pantalla aparece lo siguiente:
Cita:
Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, webmaster@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.
Y en la leyenda del navegador aparece 500 Internal Server Error; no sé si tendré algo mal configurado para que aparezca eso. Si refresco la pantalla se queda apareciendo siempre eso y no aparece de nuevo la pantalla para meter usuario y password.

Una novedad que acabo de probar es que he añadido en el .htaccess control para el error 500 y ahora aparece otra cosa distinta
Cita:

El sitio web no puede mostrar la página

HTTP 500


Causas más probables:
•El sitio web está en mantenimiento.
•El sitio web tiene un error de programación.


Puede intentar lo siguiente:

Actualice la página.

Regresar a la página anterior.

Más información Más información

Pero el caso es que no me muestra en pantalla el hola que he escrito en el fichero asignado al error 500. No sé que ocurrirá. ¿Por curiosidad tendría algo que ver el navegador? Es decir, habría que controlar cosas distintas si uso IE frente a otros navegadores?

Saludos y muchas gracias

Última edición por empardopo; 20/12/2013 a las 03:15
  #6 (permalink)  
Antiguo 20/12/2013, 06:51
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 10 años, 9 meses
Puntos: 578
Respuesta: Protección con fichero .htaccess

¿Podrías enseñar el código con el que defines el archivo de error?

Etiquetas: .htaccess, php
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:48.