当前位置:首页 办公学习 给emlog验证码增加干扰线、噪点、刷新功能

给emlog验证码增加干扰线、噪点、刷新功能

  • 内容
  • 评论
  • 相关
EMLOG的所有文章评论表单都是使用一个相同的提交地址,只是将文章ID赋在一个INPUT之中,这就给了机器人可趁之机:提交地址固定的、验证码地址固定的(还TM特好识别),文章ID是数字的随机生成就好,EMLOG的评论表单被模似简直是史上最轻松啊!所以JS之类的手段在机器人面前都是渣……8错,在尚无给力插件问世的情况下,治标治本的办法只有改内核文件了:
第1步:英文垃圾评论一大特色就是长篇的并夹杂着火星文字,所以必含中文这样的反制也弱爆了,comment_controller.php文件定义评论最大字符数居然为8000,这是干神马的节奏,很多文章都够不到4000字好吧,发条微博和说说都不能超140字,所以偶赶紧给改为几百压压惊,上千字的精彩评论偶不需要啊 第2步:额,斗个胆,EMLOG默认的验证码偶能吐个槽么,生成的文字中规中矩且颜色清晰好辨,根本就是鸡肋嘛,除了给真心评论的人制造一道坎外,简直就是垃圾评论机器人的帮凶,还有比这更好自动识别的验证码么?checkcode.php唯一可赞之处似乎是不涉及字体文件,代码也比较精炼,这是偶所喜欢的风格,因此就没给彻底换掉,只是加了一点代码:增加几个随机线条,文字颜色范围也弄宽了点(为了防止人眼难识别,增加了点击刷新)……
<?php
/**
 * Emlog图片验证码生成程序
 * @copyright (c) Emlog All Rights Reserved
 * Modify By Mrxn 
 * Emlog  Site: http://www.emlog.net/
 * Mrxn's Blog: https://mrxn.net/
 */
 
session_start();
 
$randCode = '';
$chars = 'abcdefghijkmnpqrstuvwxyzABCDEFGHIJKLMNPRSTUVWXYZ23456789';
for ( $i = 0; $i < 5; $i++ ){  $randCode .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
}
 
$_SESSION['code'] = strtoupper($randCode);
 
$img = imagecreate(75,25) or die("创建图像资源失败,请刷新页面");
$bgColor = isset($_GET['mode']) && $_GET['mode'] == 't' ? imagecolorallocate($img,245,245,245) : imagecolorallocate($img,255,255,255);
$pixColor = imagecolorallocate($img,mt_rand(88, 245), mt_rand(55, 240), mt_rand(99, 200));
//画字符、大小
for($i = 0; $i < 5; $i++){  $x = $i * 13 + mt_rand(3, 7) - 2;  $y = mt_rand(0, 3);  $text_color = imagecolorallocate($img, mt_rand(100, 250), mt_rand(80, 180), mt_rand(90, 220));  imagechar($img, 5, $x + 5, $y + 3, $randCode[$i], $text_color);
}
//画干扰点
for($j = 0; $j < 240; $j++){  $x = mt_rand(0,100);  $y = mt_rand(0,40);  imagesetpixel($img,$x,$y,$pixColor);
}
//4条横斜线
for ($i=0; $i < 5; $i++) { 
    $lineColor = imagecolorallocate($img, rand(50, 150), rand(50, 150), rand(50, 150));
    $lineX1 = 0;
    $lineX2 = 80;
    $lineY1 = ($i + 1) * 8;
    $lineY2 = ($i + 1) * 15;
    imageline($img, $lineX1, $lineY1, $lineX2, $lineY2, $lineColor);
}
 
//4条竖斜线
for ($i=0; $i < 5; $i++) { 
    $lineColor = imagecolorallocate($img, rand(50, 150), rand(50, 150), rand(50, 150));
    $lineY1 = 0;
    $lineY2 = 30;
    $lineX1 = ($i + 1) * 8;
    $lineX2 = ($i + 1) * 15;
    imageline($img, $lineX1, $lineY1, $lineX2, $lineY2, $lineColor);
}
 
header('Content-Type: image/png');
imagepng($img);
imagedestroy($img);

将以上代码保存为checkcode.php放在 你网站根目录/include/lib/下 覆盖,然后重启Apache或者是Nginx 即可看到效果(当然需要后台开启验证码)。
为防止真正的读者不能识别验证码,请给验证码添加上 点击刷新 功能,
Emlog有用到验证码的源代码有如下文件:
Emlog碎语:/t/index.php
Emlog评论:/include/controller/log_controller.php
Emlog管理后台登录:includelibloginauth.php

将以上文件的验证码位置的img标签添加以下语句即可实现点击刷新验证码功能:

style="cursor:pointer;" alt="未显示?请点击刷新" title="看不清楚?请点击刷新" onclick="this.src=this.src+'?'"
如Emlog评论:/include/controller/log_controller.php, 有以下验证码源码:


<img src="".BLOG_URL."include/lib/checkcode.php" align="absmiddle"  /><input name="imgcode" type="text" class="input" size="5" tabindex="5" />
改成如下代码即可添加上点击刷新验证码功能:


<img src="".BLOG_URL."include/lib/checkcode.php" align="absmiddle" style="cursor:pointer;" alt="未显示?请点击刷新" title="看不清楚?请点击刷新" onclick="this.src=this.src+'?'" /><input name="imgcode" type="text" class="input" size="5" tabindex="5" /> 其它几个页面中添加验证码刷新功能方法类似,此略,注:此方法在em5.3.1正常使用,其他版本未测试。

注:在进行DIY操作之前,请先备份相关文件,以防万一!本文基于emlog 5.31测试可行,理论上兼容所有版本,只要php版本不低于4

正文部分到此结束

本文标签:

版权声明:若无特殊注明,本文皆为《怀旧o猫》原创,转载请保留文章出处。

本文链接:给emlog验证码增加干扰线、噪点、刷新功能 - https://www.shaozc.com/post-59.html

所有软件均经ESET NOD32 8.0安全检测,请放心下载!

给emlog验证码增加干扰线、噪点、刷新功能

发表评论

电子邮件地址不会被公开。必填项已用*标注

表情 私密 图片 链接 代码 打卡