使用这个功能之前请确认你的博客支持邮件发送功能,并且服务器上的PHP已经加载了curl扩展,否则将没有任何效果!
一、登录成功提醒
如果有人登录了系统,就会发一封邮件到邮箱,提醒你有人登录了,如果当时不是你登录,就要引起警惕了。将以下代码放入主题的functions.php中:
/***************************************************** 函数名称:wp_login_notify v1.0 by DH.huahua. 函数作用:有登录wp后台就会email通知博主 ******************************************************/ function wp_login_notify() { date_default_timezone_set('PRC'); $admin_email = get_bloginfo ('admin_email'); $to = $admin_email; function getIP() { if (@$_SERVER["HTTP_X_FORWARDED_FOR"]) $ip = $_SERVER["HTTP_X_FORWARDED_FOR"]; else if (@$_SERVER["HTTP_CLIENT_IP"]) $ip = $_SERVER["HTTP_CLIENT_IP"]; else if (@$_SERVER["REMOTE_ADDR"]) $ip = $_SERVER["REMOTE_ADDR"]; else if (@getenv("HTTP_X_FORWARDED_FOR")) $ip = getenv("HTTP_X_FORWARDED_FOR"); else if (@getenv("HTTP_CLIENT_IP")) $ip = getenv("HTTP_CLIENT_IP"); else if (@getenv("REMOTE_ADDR")) $ip = getenv("REMOTE_ADDR"); else $ip = "Unknown"; return $ip; } $ip = getIP() ; $iplist=list($ip1, $ip2) = split ('[,]', $ip); function getIPLoc_QQ($ip1){ $url = 'http://ip.qq.com/cgi-bin/searchip?searchip1='.$ip1; $ch = curl_init($url); curl_setopt($ch,CURLOPT_ENCODING ,'gb2312'); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ; $result = curl_exec($ch); $result = mb_convert_encoding($result, "utf-8", "gb2312"); curl_close($ch); preg_match("@<span>(.*)</span></p>@iU",$result,$ipArray); $loc = $ipArray[1]; return $loc; } $subject = '你的博客空间登录提醒'; $message = '你好!你的博客(' . get_option("blogname") . ')有登录!<br/>' . '请确定是您自己的 登录,以防别人攻击!登录信息如下:<br/>' . '登录名:' . $_POST['log'] . '<br/> ' .'登录时间:' . date("Y-m-d H:i:s") .'<br/>' .'登录IP:'. $ip1 .'('. getIPLoc_QQ($ip1).')'; $wp_email = 'no-reply@' . preg_replace('#^www.#', '', strtolower($_SERVER['SERVER_NAME'])); $from = "From: "" . get_option('blogname') . "" <$wp_email>"; $headers = "$from Content-Type: text/html; charset=" . get_option('blog_charset') . " "; wp_mail( $to, $subject, $message, $headers ); } add_action('wp_login', 'wp_login_notify');
二、登录失败提醒
有人尝试登陆你的系统,但是没有成功,这种反复尝试的动作本身就需要被记录下来,发给博主,这样,只要有错误的登录,就会发一封邮件到自己的邮箱,将对方尝试的登录名和登录密码发送到你邮箱。将以下代码放入主题的functions.php中:
/***************************************************** 函数名称:wp_login_failed_notify v1.0 by DH.huahua. 函数作用:有错误登录wp后台就会email通知博主 ******************************************************/ function wp_login_failed_notify() { date_default_timezone_set('PRC'); $admin_email = get_bloginfo ('admin_email'); $to = $admin_email; function getIP() { if (@$_SERVER["HTTP_X_FORWARDED_FOR"]) $ip = $_SERVER["HTTP_X_FORWARDED_FOR"]; else if (@$_SERVER["HTTP_CLIENT_IP"]) $ip = $_SERVER["HTTP_CLIENT_IP"]; else if (@$_SERVER["REMOTE_ADDR"]) $ip = $_SERVER["REMOTE_ADDR"]; else if (@getenv("HTTP_X_FORWARDED_FOR")) $ip = getenv("HTTP_X_FORWARDED_FOR"); else if (@getenv("HTTP_CLIENT_IP")) $ip = getenv("HTTP_CLIENT_IP"); else if (@getenv("REMOTE_ADDR")) $ip = getenv("REMOTE_ADDR"); else $ip = "Unknown"; return $ip; } $ip = getIP() ; $iplist=list($ip1, $ip2) = split ('[,]', $ip); function getIPLoc_QQ($ip1){ $url = 'http://ip.qq.com/cgi-bin/searchip?searchip1='.$ip1; $ch = curl_init($url); curl_setopt($ch,CURLOPT_ENCODING ,'gb2312'); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ; $result = curl_exec($ch); $result = mb_convert_encoding($result, "utf-8", "gb2312"); curl_close($ch); preg_match("@<span>(.*)</span></p>@iU",$result,$ipArray); $loc = $ipArray[1]; return $loc; } $subject = '你的博客空间登录错误警告'; $message = '你好!你的博客空间(' . get_option("blogname") . ')有登录错误!<br/>' . '请确定是您 自己的登录失误,以防别人攻击!登录信息如下:<br/>' . '登录名:' . $_POST['log'] . '<br/>' .'登录密码: ' . $_POST['pwd'] . '<br/>' .'登录时间:' . date("Y-m-d H:i:s") . '<br/> ' .'登录IP:'. $ip1 .'('. getIPLoc_QQ($ip1).')'; $wp_email = 'no-reply@' . preg_replace('#^www.#', '', strtolower($_SERVER['SERVER_NAME'])); $from = "From: "" . get_option('blogname') . "" <$wp_email>"; $headers = "$from Content-Type: text/html; charset=" . get_option('blog_charset') . " "; wp_mail( $to, $subject, $message, $headers ); } add_action('wp_login_failed', 'wp_login_failed_notify');
上面代码中,我加入了获取ip和获取ip所在地的代码,如果你觉得没用,可以删掉,也可以改为自己的。
上面获取ip所在地的代码利用的是腾讯IP分享计划,使用curl来模拟http请求,然后用getIPLoc_QQ($ip1)输出,所以在使用之前请确认服务器上的PHP已经加载了curl扩展。
方法:打开PHP配置文件php.ini,搜索“extension=php_curl.dll”,将其前面的分号(;)去掉,然后重启HTTP服务器即可。
获取ip所在地代码如下
/* *根据腾讯IP分享计划的地址获取IP所在地,比较精确 */ function getIPLoc_QQ($ip1){ $url = 'http://ip.qq.com/cgi-bin/searchip?searchip1='.$ip1; $ch = curl_init($url); curl_setopt($ch,CURLOPT_ENCODING ,'gb2312'); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ; // 获取数据返回 $result = curl_exec($ch); $result = mb_convert_encoding($result, "utf-8", "gb2312"); // 编码转换,否则乱码 curl_close($ch); preg_match("@<span>(.*)</span></p>@iU",$result,$ipArray); $loc = $ipArray[1]; return $loc; }
还有个新浪IP查询接口,也是使用curl来模拟http请求,用getIPLoc_sina($ip1)输出,不过返回的是JSON格式的数据,所以在使用之前还的确认服务器上的PHP已经加载了json扩展。
获取ip所在地代码如下
/* *根据新浪IP查询接口获取IP所在地 */ function getIPLoc_sina($ip1){ $url = 'http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip='.$ip1; $ch = curl_init($url); //curl_setopt($ch,CURLOPT_ENCODING ,'utf8'); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ; // 获取数据返回 $location = curl_exec($ch); $location = json_decode($location); curl_close($ch); $loc = ""; if($location===FALSE) return ""; if (emptyempty($location->desc)) { $loc = $location->province.$location->city.$location->district.$location->isp; }else{ $loc = $location->desc; } return $loc; }
注:通过getIP()会得到两个ip地址,我用split()把它分割出来了,这里的$ip1是访客的ip地址,$ip2是网站的ip地址,我们只是获取登录者的ip,所有只输出$ip1就行了。
下面贴一个隐藏后台路径的办法
打开根目录的wp-login.php,找到,在它的上一行添加这段代码:
<?php if($_GET["kaimen"]!="haode"){ header('Location: http://www.abc.com/');//这里换成你的网址 } ?>
这样,就只能通过http://www.abc.com/wp-login.php?kaimen=haode进入后台了,否则就跳转到http://www.abc.com/
转载自:麦田一根葱
分类:新闻资讯