Logar tentativas de login inválidas - htpasswd

3

Eu tenho protegido por senha meu / www root usando um arquivo .htaccess e .htpasswd e agora eu queria saber se é possível efetuar login em tentativas de autenticação inválidas. Meu primeiro porém foi que tentativas bem-sucedidas e inválidas, incluindo a senha fornecida, seriam registradas em /var/log/apache2/error_log , mas parece que apenas o nome de usuário está logado neste arquivo.

Meu servidor está executando apache 2.2.21 on osx 10.7.4 .

    
por Cyclonecode 25.12.2012 / 11:52

3 respostas

3

Pesquisei na Web e deparei com uma boa explicação sobre como conseguir isso.

Primeiro, o arquivo .htaccess :

# script that will store invalid login attempts
ErrorDocument 401 /logging.php

AuthName "My Password Protected Site"
AuthUserFile /<FULLPATH>/.htpasswd
AuthType Basic
Require valid-user

# Set REMOTE_USER env variable on 401 ErrorDocument
RewriteEngine On
RewriteBase /
RewriteCond %{ENV:REDIRECT_STATUS} ^401$
RewriteRule .* - [E=REMOTE_USER:%{ENV:REDIRECT_REMOTE_USER}]

Em seguida, o script real que fará o registro:

if (isset($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW'])):
    $fp = fopen(MYLOGFILE, 'a+');
    $password = $_SERVER['PHP_AUTH_PW'];
    $username = $_SERVER['PHP_AUTH_USER'];
    $time = date('y-m-d/H:i:s');
    $request = $_SERVER['REDIRECT_URL'];
    fwrite($fp, $time . "\t" . $request . "\t" . $username . "/" . $password . "\r\n");
    fclose($fp);
endif;

ob_start();
header("HTTP/1.1 401 Authorization Required",1);
header("Status: 401 Authorization Required",1);
echo '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head><title>401 Authorization Required</title></head><body>
<h1>Authorization Required</h1>
<p>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 . </p>';
exit();

O acima funciona muito bem, e armazena todos os nomes de usuários e senhas inválidos no arquivo de log especificado. Eu não recebi o exemplo abaixo para trabalhar, mas me deu algumas idéias sobre como proceder.

Cada linha no arquivo de saída conterá algo assim:

 13-01-01/12:12:16 - /www/ - username/password

Registre todos os logins .htaccess / .htpasswd

    
por 04.02.2013 / 23:51
7

Por que você quer fazer isso? Como mricon observou, o registro de senhas em texto claro é altamente desencorajado, mesmo para depuração.

mod_security pode ser usado de uma maneira que atenda aos seus desejos, registrando cabeçalhos HTTP. As senhas não são transmitidas em texto puro pelo navegador, portanto, você deve decodificar a seqüência codificada na Base64.

Veja as diretivas SecAuditLog e SecAuditLogParts aqui .

Talvez isso seja mais adequado para seus objetivos: Protect HTTP Auth from força bruta ataques

    
por 31.01.2013 / 01:43
2

Minha instalação do apache2 tem essas mensagens de log sobre tentativas malsucedidas:

 access to / failed, reason: verification of user id 'qwdsad' not configured

Você pode instalar o fail2ban para receber essas mensagens dos logs e fazer algo para evitar isso.

    
por 25.12.2012 / 16:18