web-dev-qa-db-ja.com

無効なログイン試行をログに記録する-htpasswd

/ wwwルートを.htaccessおよび.htpasswdファイルを使用してパスワードで保護していますが、無効な認証試行にログインできないか疑問に思っていました。私が最初に行ったのは、提供されたパスワードを含めて、成功した試行と無効な試行の両方が/var/log/Apache2/error_logにログインすることでしたが、ユーザー名だけがこのファイルにログインしているようです。

私のサーバーはApache 2.2.21osx 10.7.4を実行しています。

4
Cyclonecode

私はウェブを検索して、これを達成する方法についての良い説明に出くわしました。

まず.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ログインをログに記録する

3
Cyclonecode

なぜこれをしたいのですか? mriconが指摘したように、パスワードをクリアテキストで記録することは、デバッグのためであっても、あまりお勧めできません。

mod_securityは、HTTPヘッダーをログに記録することにより、好みに合わせて使用​​できます。ただし、パスワードはブラウザによってクリアテキストで送信されないため、Base64でエンコードされたシーケンスをデコードする必要があります。

ディレクティブSecAuditLogおよびSecAuditLogPartshere を参照してください。

おそらくこれはあなたの目標により適しています: ブルートフォース攻撃からHTTP認証を保護する

8
fuero

私のApache2インストールには、失敗した試行に関するログメッセージがあります。

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

Fail2banをインストールして、ログからこれらのメッセージをgrepし、それを防ぐために何かをすることができます。

2
dr-evil