Мой / 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
В моей установке apache2 есть такие сообщения журнала о неудачных попытках:
access to / failed, reason: verification of user id 'qwdsad' not configured
Вы можете установить fail2ban, чтобы извлекать эти сообщения из журналов и что-то делать, чтобы это предотвратить.