为博客增加算数验证

Author Avatar
混淆者· 1月26日 本文共计2816字|已被浏览299次
  • 在其它设备中阅读本文章

起因

最近(?)我的博客被bot灌水了

Snipaste_2020-01-26_13-27-30.png

开了评论审核但是觉得审核麻烦
于是就加了个算数验证


经过

首先我找到了这篇文章
复制粘贴一顿操作能用了
但是样式奇丑无比
于是决定以我小学二年级的PHP水平魔改一下算数验证
首先修改函数
原有的函数是这样的:

//算术验证评论
function spam_protection_math(){
    $num1=rand(1,49);
    $num2=rand(1,49);
    echo "<label style=\"line-height:30px;\" for=\"math\"><code>$num1</code>+<code>$num2</code> = </label>\n";
    echo "<input type=\"text\" name=\"sum\" class=\"text\" value=\"\" size=\"25\" tabindex=\"4\" style=\"width:130px;float:right;\" placeholder=\"计算结果:\">\n";
    echo "<input type=\"hidden\" name=\"num1\" value=\"$num1\">\n";
    echo "<input type=\"hidden\" name=\"num2\" value=\"$num2\">"; //直接写死
}
function spam_protection_pre($comment, $post, $result){
    $sum=$_POST['sum'];
    switch($sum){
        case $_POST['num1']+$_POST['num2']:
        break;
        case null:
        throw new Typecho_Widget_Exception(_t('对不起: 请输入验证码。<a href="javascript:history.back(-1)">返回上一页</a>','评论失败'));
        break;
        default:
        throw new Typecho_Widget_Exception(_t('对不起: 验证码错误,请<a href="javascript:history.back(-1)">返回</a>重试。','评论失败'));
}

可以看到直接把标签什么的直接写死到了程序里面
盘它!
删掉spam_protection_math函数,自己造了个函数
本质就是生成两个随机数

function getAuth(){
    $num1=rand(1,49);
    $num2=rand(1,49);
    return array ($num1,$num2);
}

comments.php的表单中修改代码

<!-- captha -->
<div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label"> //主题样式标签
    <?php list($num1,$num2) = getAuth(); ?> //获得生成的随机数
    <input type="text" id="comment" name="sum" class="mdl-textfield__input" />//输入框,name属性必须是sum,type建议是number(text也行)
    <label for="comment" class="mdl-textfield__label">
        <code>
            <?php echo $num1 ?> + <?php echo $num2 ?> = ?
        </code>
    </label>
    <input type="hidden" name="num1" value="<?php echo $num1 ?>" />
    //隐式的将两个随机数加入表单
    <input type="hidden" name="num2" value="<?php echo $num2 ?>" />
</div>

这样就行了
function.php中的spam_protection_pre函数我没改

function spam_protection_pre($comment, $post, $result){
    $sum=$_POST['sum'];
    switch($sum){
        case $_POST['num1'] + $_POST['num2']:
        break;
        case null:
        throw new Typecho_Widget_Exception(_t('对不起: 请输入验证码。<a href="javascript:history.back(-1)">返回上一页</a>','评论失败'));
        break;
        default:
        throw new Typecho_Widget_Exception(_t('对不起: 验证码错误,请<a href="javascript:history.back(-1)">返回</a>重试。','评论失败'));
    }
    return $comment;
}


写的很简略应该不太好看懂
就记录一下吧方便以后用


结果

当然是能用了
你如果想试试可以评论一下(

本文链接:https://blog.mnixry.cn/Technology/add-captha-to-blog.html
该博客遵守 CC BY-NC-SA 4.0 协议

现在的我,未来的我,一起去啊,更远的地方!----《伪装学渣》