typecho添加评论算术验证

chen'mo
2021-05-10 / 4 评论 / 5,827 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2021年05月10日,已超过1285天没有更新,若内容或图片失效,请留言反馈。

typecho 和 wordpress 一样,开启评论后,总是会有垃圾的评论、外国机器人评论灌水,加上一个算术验算能有效的增加一层防护网。我加上以后,类似的灌水消失了。添加算术验证的方式虽多,但万变不离其宗,这里列举一种广为流传的。

实现方式

1、 在 function.php 文件中添加

function _spamProtectionMath()
{
    $num1 = rand(0, 9);
    $num2 = rand(0, 9);
    echo "<input type=\"text\" value=\"\" placeholder=\"请计算 $num1 + $num2 = ...\" autocomplete=\"off\" name=\"sum\" maxlength=\"2\">";
    echo "<input type=\"hidden\" name=\"num1\" value=\"$num1\">";
    echo "<input type=\"hidden\" name=\"num2\" value=\"$num2\">";
}
function _spamProtectionPre($commentdata)
{
    $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 $commentdata;
}

2、 在内容页或者单页显示

function themeInit($self){
    if ($self->is('single')) {
        $comment = _spamProtectionPre($self);
    }
}

3、 ajax 判断,找到评论提交这一块代码,把下面的加上

const sum = $("input[name='sum']").val();
const num1 = $("input[name='num1']").val();
const num2 = $("input[name='num2']").val();
$.ajax({
    ...
    data: { num1, num2, sum },
    ...
});

4、 调用,把下面的代码添加评论提交的表单内

<?php _spamProtectionMath(); ?>
Adobe Photoshop CS6 极限精简版
« 上一篇 05-09
typecho 实现“那年今日”功能
下一篇 » 05-11

评论 (4)

插入图片
  1. 头像
    hhh Lv.1   广东省东莞市
    Android Pie · Google Chrome
    沙发

    DzQ1104@

    回复
  2. 头像
    a Lv.1   北京市北京市
    MacOS · Google Chrome
    板凳

    这篇文章写的真不错,真详细,点个赞。asd

    回复
  3. 头像
    ADA Lv.1   浙江省金华市
    Windows 10 · FireFox
    地毯

    WAAdwWWQWEZ咋的

    回复
  4. 头像
    。。。 Lv.1   广西玉林市
    Android · QQ Browser
    第4楼

    发动机我刚刚

    回复