Записывать неверные попытки входа в систему - 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
Почему ты хочешь сделать это? Как отметил mricon, регистрация паролей в виде открытого текста крайне нежелательна даже для отладки.
mod_security
может использоваться способом, который соответствует вашим желаниям, путем регистрации заголовков HTTP. Однако пароли не передаются в виде открытого текста браузером, поэтому необходимо декодировать закодированную последовательность Base64.
Смотрите директивы SecAuditLog
а также SecAuditLogParts
здесь
Возможно, это больше подходит для ваших целей: защита HTTP-аутентификации от атак методом перебора
У моей установки apache2 есть такие сообщения журнала о неудачных попытках:
access to / failed, reason: verification of user id 'qwdsad' not configured
Вы можете установить fail2ban, чтобы очистить эти сообщения от журналов и сделать что-то, чтобы предотвратить это.