Apache-2.2

記錄無效的登錄嘗試 - htpasswd

  • February 12, 2018

我使用.htaccessand.htpasswd文件對我的 /www 根目錄進行了密碼保護,現在我想知道是否可以登錄無效的身份驗證嘗試。我的第一個想法是成功和無效的嘗試,包括提供的密碼都會被登錄,/var/log/apache2/error_log但似乎只有使用者名被登錄到這個文件中。

我的伺服器正在apache 2.2.21執行osx 10.7.4

我在網上搜尋並偶然發現了一個關於如何實現這一目標的很好的解釋。

首先是.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 編碼序列進行解碼。

請參閱指令SecAuditLogSecAuditLogParts 此處

也許這更適合您的目標:保護 HTTP Auth 免受暴力攻擊

引用自:https://serverfault.com/questions/460765