将WordPress错误登录者信息记录到本地文件

在使用上一个主机时,我是用发邮件到管理员邮箱的方式来知晓WordPress后台被尝试使用错误的用户名/密码组合(下称:凭据)登陆

但这个主机上由于sendmail未配置好,无法发送电邮。为了知晓暴力破解者尝试了什么凭据,只能退而求其次,将其记录在文件里。


将如下内容添加至当前主题/任何一个已启用的插件的function.php中,便可将使用错误凭据的登录者的信息记录在{站点根目录}/badlogin.log

function wp_log_faillogin()
{
	date_default_timezone_set("PRC");
	$badname = $_POST['log'];
	$badpswd = $_POST['pwd'];
	$badtime = date("Y-m-d H:i:s");
	$badip = $_SERVER['REMOTE_ADDR'];

	$logfile = 'badlogin.log';
	$currerent = file_get_contents($logfile);
	$currerent = $currerent . "\n" . $badtime . "\n" . $badname . "\n" . $badpswd . "\n" . $badip . "\n";
	file_put_contents($logfile, $currerent);
}

add_action('wp_login_failed', 'wp_log_faillogin');

记录下来的格式如下所示(IP地址已部分隐去.):

Time: 2017-08-18 15:33:52
Username: 2333
Password: 4444
IP Address: 183.x.x.49

Time: 2017-08-18 15:34:01
Username: 1234
Password: 4321
IP Address: 183.x.x.49

此外,由于该文件置于站点根目录,最好在站点根目录的.htaccess中添加如下内容,以免该文件能被访问到:

<Files badlogin.log>
Deny from all
</Files>