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

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

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

3 ответа

Решение

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

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

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

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

Смотрите директивы SecAuditLog а также SecAuditLogParts здесь

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

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

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

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

Другие вопросы по тегам