我使用.htaccess和.htpasswd文件的密码保护了我的/ www root,现在我想知道是否可以login无效的身份validation尝试。 我的第一个,虽然成功和无效的尝试,包括提供的密码将被logging到/var/log/apache2/error_log但似乎只有用户名login到这个文件。
我的服务器在osx 10.7.4 apache 2.2.21上运行apache 2.2.21 。
你为什么要这样做? 正如mricon所指出的那样,即使对于debugging,以明文formslogging密码也是非常不鼓励的。
通过loggingHTTP标头, mod_security可以以适合你的方式使用。 浏览器不会以明文forms传输密码,因此您必须解码Base64编码的序列。
在这里查看指令SecAuditLog和SecAuditLogParts 。
也许这是更适合你的目标: 保护来自暴力攻击的HTTPauthentication
我在网上search,偶然发现了一个关于如何实现这一点的很好的解释。
首先.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}]
然后将执行日志logging的实际脚本:
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('ymd/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 (eg, 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
logging所有.htaccess / .htpasswdlogin
我的apache2安装有关于失败的尝试这样的日志消息:
access to / failed, reason: verification of user id 'qwdsad' not configured
您可以安装fail2ban来从日志中查找这些消息,并执行一些操作来阻止它。