首页 > 新闻资讯 > 给你的wordpress添加后台登录邮件提醒

给你的wordpress添加后台登录邮件提醒

1条评论
标签:
更多

使用这个功能之前请确认你的博客支持邮件发送功能,并且服务器上的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\nContent-Type: text/html; charset=" . get_option('blog_charset') . "\n";
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\nContent-Type: text/html; charset=" . get_option('blog_charset') . "\n";
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/

转载自:麦田一根葱

mail

* 版权声明:作者WordPress啦! 转载请注明出处。

#1
一看代码就头大,能不能整个插件什么的出来啊。