为博客增加算数验证
起因
最近(?)我的博客被bot灌水了
开了评论审核但是觉得审核麻烦
于是就加了个算数验证
经过
首先我找到了这篇文章
复制粘贴一顿操作能用了
但是样式奇丑无比
于是决定以我小学二年级的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 协议