Назад | Перейти на главную страницу

Регистрировать неверные попытки входа в систему - htpasswd

Мой / www корень защищен паролем с помощью .htaccess и .htpasswd файл, и теперь мне было интересно, можно ли выполнить недопустимые попытки аутентификации. Мое первое, однако, заключалось в том, что как успешные, так и недействительные попытки, включая указанный пароль, будут входить в систему /var/log/apache2/error_log но похоже, что в этот файл входит только имя пользователя.

Мой сервер работает apache 2.2.21 на osx 10.7.4.

почему ты хочешь сделать это? Как отмечает mricon, запись паролей в виде открытого текста крайне не рекомендуется, даже для отладки.

mod_security может использоваться так, как вам хочется, путем регистрации заголовков HTTP. Однако пароли не передаются браузером в виде открытого текста, поэтому вы должны декодировать последовательность в кодировке Base64.

См. Директивы SecAuditLog и SecAuditLogParts Вот.

Возможно, это больше подходит для ваших целей: Защитите HTTP Auth от атак грубой силы

Я поискал в Интернете и наткнулся на хорошее объяснение того, как этого добиться.

Сначала .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}]

Затем фактический сценарий, который будет вести журнал:

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();

Вышеупомянутое работает нормально и сохраняет все недопустимые имена пользователей и пароли в указанном файле журнала. Приведенный ниже пример не работал, но он дал мне несколько идей о том, как действовать дальше.

Каждая строка в выходном файле будет содержать что-то вроде этого:

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

Регистрировать все входы в систему .htaccess / .htpasswd

В моей установке apache2 есть такие сообщения журнала о неудачных попытках:

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

Вы можете установить fail2ban, чтобы извлекать эти сообщения из журналов и что-то делать, чтобы это предотвратить.