以前发不过一个防范暴力注册的小插件,对于防范机器的自动注册具有较好的防范作用,不过插件也存在一个问题,就是当多人同时注册时就会有冲突,导致只有最后一个人才能注册成功。今天特意完善了一下,并拓展到发帖回复的应用上,因为大多数垃圾广告都是刚注册的会员发布的,因此这项措施只针对刚注册的“初级会员”级别用户,其他更高级用户则不需要确认。这样既杜绝自动注册,也能防范自动发帖与回帖。
当然,本插件只能对自动注册、自动发帖的机器人有效,而对于手动发布广告的,请配合我们另一个插件使用:《发帖关键字屏蔽v1.1》
说明:本插件适用于 Discuz! 所有版本,但这里只提供 Discuz!7.1 的具体安装方法,其他版本请参照修改。
名称:开卷随机变量v2.0
效果说明:
使用本插件后,用户注册需要勾选“我要注册为会员”的确认选项,否则不能通过注册。发帖或回帖时则要勾选“确认无误”(仅限于论坛初级会员),由于这一选项设定的是一个随机变量,所以能够防范暴力注册软件的识别。
修改步骤:
1.修改 register.php:
找到:
- $fromuid = !empty($_DCOOKIE['promotion']) && $creditspolicy['promotion_register'] ? intval($_DCOOKIE['promotion']) : 0;
复制代码
在下面一行添加:
- //random function by KaijuanStudio
- $ctimeout = 300; //这里设置超时响应时间,超过这个时间没有提交则需要刷新页面才能再次提交,默认为300秒(5分钟)。
- $cache = './forumdata/cache/KS2010&Random_v2.php';
- include_once DISCUZ_ROOT.$cache;
- if(!$certi[$sid]) {
- $cert = $ceriti[$sid] = randoms(9);
- $fp = @fopen($cache, 'w');
- if($fp) {
- $cert = "<?php\n\$certi['$sid'] = array('$timestamp','$cert');";
- if(is_array($certi)) {
- foreach($certi as $key => $carray) {
- if($carray[0] > $timestamp - $ctimeout) {
- $cert .= "\n\$certi['$key'] = array('$carray[0]','$carray[1]');";
- }
- }
- }
- $cert .= "\n?>";
- fwrite($fp, $cert);
- fclose($fp);
- }
- }
- function randoms($leng){
- $edh = '0123456789abcdefghijklmnopqrstuvwxyz';
- return 'K'.substr(str_shuffle($edh),0,($leng));
- }
- //random function end
复制代码 找到:
- include template('register');
复制代码 在上面一行添加:
- //random function by KaijuanStudio
- $randcode = '<span>
- <label><em>确认注册:</em><input type="checkbox" name="'.$certi[$sid][1].'" value="1"> 我要注册为会员</label>
- </span>';
- //random function by end
复制代码 继续找到:
- $censorexp = '/^('.str_replace(array('\\*', "\r\n", ' '), array('.*', '|', ''), preg_quote(($censoruser = trim($censoruser)), '/')).')$/i';
复制代码 在上面一行添加
- //random function by KaijuanStudio
- $randinfo = "
- if(!\${$certi[$sid][1]}) {
- showmessage('profile_required_info_timeout');
- }";
- eval($randinfo);
- //random function by end
复制代码
2.修改 post.php
打开 post.php 并找到:
- if($action == 'newthread') {
复制代码 在上面一行添加:
- //random function by KaijuanStudio
- if($groupid == 10 && ($action == 'newthread' || $action == 'reply')) {
- $ctimeout = 300; //超时响应时间
- $cache = './forumdata/cache/KS2010&Random_v2.php';
- include_once DISCUZ_ROOT.$cache;
- if(!$certi[$sid]) {
- $cert = $ceriti[$sid] = randoms(9);
- $fp = @fopen($cache, 'w');
- if($fp) {
- $cert = "<?php\n\$certi['$sid'] = array('$timestamp','$cert');";
- if(is_array($certi)) {
- foreach($certi as $key => $carray) {
- if($carray[0] > $timestamp - $ctimeout) {
- $cert .= "\n\$certi['$key'] = array('$carray[0]','$carray[1]');";
- }
- }
- }
- $cert .= "\n?>";
- fwrite($fp, $cert);
- fclose($fp);
- }
- }
- if(!submitcheck('topicsubmit', 0, $seccodecheck, $secqaacheck) && !submitcheck('replysubmit', 0, $seccodecheck, $secqaacheck)) {
- $randcode = '<input type="checkbox" name="'.$certi[$sid][1].'" value="1"> <em style="color:orange">确认无误</em>';
- } else {
- $randinfo = "
- if(!\${$certi[$sid][1]}) {
- showmessage('profile_required_info_timeout');
- }";
- eval($randinfo);
- }
- }
- function randoms($leng){
- $edh = '0123456789abcdefghijklmnopqrstuvwxyz';
- return 'X'.substr(str_shuffle($edh),0,($leng));
- }
- //random function end
复制代码
3.修改 viewthread.php
打开 viewthread.php 并找到
- include template('viewthread');
复制代码 在上面一行添加:
- //random function by KaijuanStudio
- if($groupid == 10 && $fastpost && $allowpostreply) {
- $ctimeout = 300; //超市响应时间
- $cache = './forumdata/cache/KS2010&Random_v2.php';
- include_once DISCUZ_ROOT.$cache;
- if(!$certi[$sid]) {
- $cert = $ceriti[$sid] = randoms(9);
- $fp = @fopen($cache, 'w');
- if($fp) {
- $cert = "<?php\n\$certi['$sid'] = array('$timestamp','$cert');";
- if(is_array($certi)) {
- foreach($certi as $key => $carray) {
- if($carray[0] > $timestamp - $ctimeout) {
- $cert .= "\n\$certi['$key'] = array('$carray[0]','$carray[1]');";
- }
- }
- }
- $cert .= "\n?>";
- fwrite($fp, $cert);
- fclose($fp);
- }
- }
- $randcode = ' | <input type="checkbox" name="'.$certi[$sid][1].'" value="1"> <em style="color:orange">确认无误</em>';
- }
- //random function by end
复制代码
4.修改 register.htm
打开 templates/default/register.htm 并找到:
- <!--{if $reginvitemsg || $regstatus == 2}-->
复制代码 在上面一行添加:
5.修改 templates.lang.php
打开 templates/default/templates.lang.php 并找到:
- 'profile_required_info_invalid' => '您没有填写必填项目,请返回修改。',
复制代码
在下面一行添加:
- 'profile_required_info_timeout' => '您还没确认或页面超时,请刷新重试。',
复制代码 6.修改 post_infloat.htm
打开 templates/default/post_infloat.htm 并找到:- <!--{if $secqaacheck || $seccodecheck}-->{subtemplate seccheck}<!--{/if}-->
复制代码
在下面一行添加:
7.修改 viewthread_fastpost.htm
打开 templates/default/viewthread_fastpost.htm 并找到:
- {lang post_fastreply_gotolast}</label>
复制代码 在后面添加:
8.修改完毕,上传并更新缓存! |
上一篇: Discuz 插件:开卷工作室发贴关键字屏蔽 v1.1 For Discuz下一篇: Discuz X2防注册机加入reCAPTCHA验证码
|