事件
昨天下午7点51到7点54这4分钟时间里,一为收到了400多条邮件提醒,内容是:“你好! 你的博客空间(一为忆)有失败登录!请确定是您自己的登录失误, 以防别人攻击! 登录信息如下:”,而且IP还是同一个“登录IP: 52.58.222.48 [德国黑森州法兰克福amazon.com]”,这是有人看上了?
之后就找了一下有没有限制的方法,有添加简单的计算的,有推荐了各种插件的,大体试了一下,感觉也可以,但是之前我用了一个主题使用了腾讯的防水墙,感觉很好,好吧,就给 Swallow 主题添加这防水墙了。谷歌百度了一番,竟然没人分享
,那就凭借我这几个月的折腾学习自己加吧。
注册账号
首先我们去防水墙注册账号 电梯 ,不做说明,按步骤来就可以了,然后看看他的接入帮助文档,还好写的还挺详细,开工。
腾讯防水墙正式升级为验证码 Captcha 服务,又可以接入了,点击下方文章查看注册方法。
2019/09/01,看到防水墙官网公告
“腾讯防水墙的验证码免费服务已暂停申请,已接入业务不受影响。验证码产品即将在腾讯云全新上线,终身15万次免费安全防护,敬请期待。”
想接入的站长等待一下新产品,到时候一为也会跟进
接入代码
不多啰嗦,直接上码,看备注修改自己的 App ID 和 App Secret Key (高亮行)
<?php
/**
* WordPress 接入腾讯防水墙,给网站登录加上验证功能
* 原文地址:https://www.iowen.cn/wordpress-tencent-waterproof-wall/
* 一为忆
* swallow 主题
*/
function add_login_head() {
echo '<script src="https://ssl.captcha.qq.com/TCaptcha.js"></script>';
echo '<style type="text/css">.login_button {line-height:38px;border-radius:3px;cursor:pointer;color:#555;background:#eee;border:2px solid #a5a5a5;font-size:14px;margin-bottom:10px;text-align:center;transition:.5s;}.login_button:hover{color:#fff;background:#444;border-color:#444;}</style>';
}
function add_captcha_body(){ ?>
<input type="hidden" id="wp007_tcaptcha" name="tcaptcha_007" value="" />
<input type="hidden" id="wp007_ticket" name="syz_ticket" value="" />
<input type="hidden" id="wp007_randstr" name="syz_randstr" value="" />
<!-- 修改下面的 data-appid 值 -->
<div id="TencentCaptcha" data-appid="App ID" data-cbfn="callback" class="login_button">验证</div>
<script>
window.callback = function(res){
if(res.ret === 0){
var but = document.getElementById("TencentCaptcha");
document.getElementById("wp007_ticket").value = res.ticket;
document.getElementById("wp007_randstr").value = res.randstr;
document.getElementById("wp007_tcaptcha").value = 1;
but.style.cssText = "color:#fff;background:#4fb845;border-color:#4fb845;pointer-events:none";
but.innerHTML = "验证成功";
}
}
</script>
<?php
}
/**
* 处理登录二次验证
*/
function validate_tcaptcha_login($user) {
$slide=$_POST['tcaptcha_007'];
if($slide == ''){
return new WP_Error('broke', __("请先进行真人验证!!!"));
}
else{
$result = validate_login($_POST['syz_ticket'],$_POST['syz_randstr']);
if ($result['result']) {
return $user;
} else{
return new WP_Error('broke', $result['message']);
}
}
}
/**
* 请求服务器验证
*/
function validate_login($Ticket,$Randstr){
$AppSecretKey = "App Secret Key"; //修改App Secret Key
$appid = "App ID"; //修改App ID
$UserIP = $_SERVER["REMOTE_ADDR"];
$url = "https://ssl.captcha.qq.com/ticket/verify";
$params = array(
"aid" => $appid,
"AppSecretKey" => $AppSecretKey,
"Ticket" => $Ticket,
"Randstr" => $Randstr,
"UserIP" => $UserIP
);
$paramstring = http_build_query($params);
$content = txcurl($url,$paramstring);
$result = json_decode($content,true);
if($result){
if($result['response'] == 1){
return array(
'result'=>1,
'message' => ''
);
}else{
return array(
'result'=>0,
'message' => $result['err_msg']
);
}
}else{
return array(
'result'=>0,
'message' => '请求失败,请再试一次!'
);
}
}
add_action('login_head', 'add_login_head');
add_action('login_form','add_captcha_body');
add_filter('wp_authenticate_user', 'validate_tcaptcha_login',100,1);
/**
* 请求接口返回内容
* @param string $url [请求的URL地址]
* @param string $params [请求的参数]
* @param int $ipost [是否采用POST形式]
* @return string
*/
function txcurl($url,$params=false,$ispost=0){
$httpInfo = array();
$ch = curl_init();
curl_setopt( $ch, CURLOPT_HTTP_VERSION , CURL_HTTP_VERSION_1_1 );
curl_setopt( $ch, CURLOPT_USERAGENT , 'JuheData' );
curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT , 60 );
curl_setopt( $ch, CURLOPT_TIMEOUT , 60);
curl_setopt( $ch, CURLOPT_RETURNTRANSFER , true );
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
if( $ispost )
{
curl_setopt( $ch , CURLOPT_POST , true );
curl_setopt( $ch , CURLOPT_POSTFIELDS , $params );
curl_setopt( $ch , CURLOPT_URL , $url );
}
else
{
if($params){
curl_setopt( $ch , CURLOPT_URL , $url.'?'.$params );
}else{
curl_setopt( $ch , CURLOPT_URL , $url);
}
}
$response = curl_exec( $ch );
if ($response === FALSE) {
//echo "cURL Error: " . curl_error($ch);
return false;
}
$httpCode = curl_getinfo( $ch , CURLINFO_HTTP_CODE );
$httpInfo = array_merge( $httpInfo , curl_getinfo( $ch ) );
curl_close( $ch );
return $response;
}
将上面代码保存为新的文件 qq-captcha.php 上传到主题目录,然后在主题 functions.php 文件里添加require get_template_directory() . '/qq-captcha.php';引入就可以了。
或者直接把上面代码复制到 functions.php 文件里,方法任选把。
效果
弄好后看看效果把
没用验证直接点登录会在当前页提示
这功能我找了很久啊,点个赞把 ![]()
好了,看看还会出现几分钟之内几百条登录错误提示不 ![]()

静夜思 ( VIP 1 )
四川感谢分享
苏虞兮 ( VIP 1 )
重庆大佬
晒月亮的螃蟹 ( VIP 1 )
北京感谢分享干货 学习一下~~
Peda ( VIP 1 )
福建此处为隐藏的内容?
锟斤拷锟街的伙拷锟斤拷01锟斤拷11锟斤拷06 ( VIP 1 )
重庆锟斤拷锟街的伙拷锟斤拷01锟斤拷11锟斤拷06 ( VIP 1 )
重庆此处为隐藏的内容?
锟斤拷锟街的伙拷锟斤拷01锟斤拷11锟斤拷06 ( VIP 1 )
重庆此处为隐藏的内容!
锟斤拷喜小锟斤拷 ( VIP 1 )
河北阿萨德
锟斤拷砖锟斤拷 ( VIP 1 )
山东我使用博主的代码,应用最新的腾讯云验证码,感觉不行啊
锟斤拷小锟斤拷 ( VIP 1 )
河南太赞了 支持
迷鹿 ( VIP 1 )
山西学习分享
锟斤拷讯锟斤拷频 ( VIP 2 )
辽宁测试
锟斤拷锟斤拷 ( VIP 1 )
安徽测试
anxin ( VIP 1 )
湖北测试
sam ( VIP 1 )
重庆感谢分享,试试看
老衲 ( VIP 1 )
四川看看
Yolen ( VIP 1 )
湖北这功能不错,i了i了
锟秸斤拷锟斤拷 ( VIP 1 )
重庆已经用上,感谢分享,注册页能否也加上腾讯验证码呢?