Typecho评论加入纯代码验证,Pigeon主题可直接使用
•折腾记录
2418
14
给Pigeon主题加上一个评论验证来杜绝国外的BOT机器人评论!
参考文章1 非增强版,有漏洞,F12删除NUM元素会直接评论成功!
参考文章2 增强版,判断num1和num2元素是否为空!
最后还是自己DIY缝缝补补了一下 增加了numToWord函数让验证数字中文化
期间采了很多坑 在主题目录下的functions.php文件里修改代码
如:和主题自带的一些功能起到冲突,点赞失效! 这是因为添加的地方不对
如:方法二的代码 完全没有对已登录的用户权限进行判断,使得管理员无法成功发表评论!
使用$this->user->hasLogin();
会提示报错;
使用$GLOBALS['isLogin'] = $this->user->hasLogin();
后台的主题设置等功能就报错;
当然基于本文实现的方法只能简单加点儿验证,防君子不防小人;但是好过什么都不加要好!
现在博客这几天没有收到国外的机器人广告了.
最后还是发现了一个好用的方法:
/**
*判断用户是否已登录,未登录自动跳转到登录页面
*@return void
*/
public function checkLogin()
{
$user = Typecho_Widget::widget('Widget_User');
if (!$user->hasLogin()) {
Typecho_Widget::widget('Widget_Notice')->set(_t("未登录"), 'error');
$this->response->redirect($this->options->adminUrl);
}
}
修改一下代码逻辑:
$user = Typecho_Widget::widget('Widget_User');//获取用户信息
If($user->hasLogin()){
return $archive;//判断已登录用户直接返回,无需验证 /使用Typecho_Widget获取用户登录信息 $user = Typecho_Widget::widget('Widget_User');
}elseIf($_POST['num1'] == null || $_POST['num2'] == null ) {
throw new Typecho_Widget_Exception(_t('验证码异常.', '评论失败'));
} else {
$sum = $_POST['sum'];
switch ($sum) {
case $_POST['num1'] + $_POST['num2'] : break;
case null:
throw new Typecho_Widget_Exception(_t('请输入验证码.', '评论失败'));
break;
default:
throw new Typecho_Widget_Exception(_t('验证码错误,请认真答题', '评论失败'));
}
}
}
return $archive;
}
最终完美无错版本代码如下直接替换文件themes/pigeon/functions.php
最后在主题目录pigeon/common/comments.php
合适的地方加入
<?php spam_protection_math();?>
看看
看看
学习学习
这个是个好东西。
好东西好东西好东西
好东西
从迷你日志评论区来,感谢分享
请问下博主 使用这个主题为什么首页列表不显示分页 后台设置哪种显示方式都不显示
可以设置的呀 外观设置 - 分页样式 - 序列号分页
其他主题可以用吗
其他主题可用吗
怎么实现汉化大写的,共享出来 一下啊,太需要的了
numToWord () 代码段里已经贴出来了~ 我也是在网上找的代码自己套了一下
学习下