Apache-2.2
記錄無效的登錄嘗試 - htpasswd
我使用
.htaccess
and.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
你為什麼要這樣做?正如 mricon 所指出的,強烈建議不要以明文形式記錄密碼,即使是為了調試也是如此。
mod_security
通過記錄 HTTP 標頭,可能會以適合您願望的方式使用。但是,瀏覽器不會以明文形式傳輸密碼,因此您必須對 Base64 編碼序列進行解碼。請參閱指令
SecAuditLog
和SecAuditLogParts
此處。也許這更適合您的目標:保護 HTTP Auth 免受暴力攻擊