Discuz教程网

[代码修改] 防暴力注册、发帖回帖:开卷随机变量v2.0

[复制链接]
authicon dly 发表于 2011-12-30 16:18:11 | 显示全部楼层 |阅读模式
以前发不过一个防范暴力注册的小插件,对于防范机器的自动注册具有较好的防范作用,不过插件也存在一个问题,就是当多人同时注册时就会有冲突,导致只有最后一个人才能注册成功。今天特意完善了一下,并拓展到发帖回复的应用上,因为大多数垃圾广告都是刚注册的会员发布的,因此这项措施只针对刚注册的“初级会员”级别用户,其他更高级用户则不需要确认。这样既杜绝自动注册,也能防范自动发帖与回帖。
  当然,本插件只能对自动注册、自动发帖的机器人有效,而对于手动发布广告的,请配合我们另一个插件使用:《发帖关键字屏蔽v1.1
  说明:本插件适用于 Discuz! 所有版本,但这里只提供 Discuz!7.1 的具体安装方法,其他版本请参照修改。

名称:开卷随机变量v2.0
效果说明
  使用本插件后,用户注册需要勾选“我要注册为会员”的确认选项,否则不能通过注册。发帖或回帖时则要勾选“确认无误”(仅限于论坛初级会员),由于这一选项设定的是一个随机变量,所以能够防范暴力注册软件的识别。

修改步骤




1.修改 register.php
找到:


  1. $fromuid = !empty($_DCOOKIE['promotion']) && $creditspolicy['promotion_register'] ? intval($_DCOOKIE['promotion']) : 0;
复制代码


在下面一行添加:
  1. //random function by KaijuanStudio
  2. $ctimeout = 300; //这里设置超时响应时间,超过这个时间没有提交则需要刷新页面才能再次提交,默认为300秒(5分钟)。
  3. $cache = './forumdata/cache/KS2010&Random_v2.php';
  4. include_once DISCUZ_ROOT.$cache;
  5. if(!$certi[$sid]) {
  6. $cert = $ceriti[$sid] = randoms(9);
  7. $fp = @fopen($cache, 'w');
  8. if($fp) {
  9. $cert = "<?php\n\$certi['$sid'] = array('$timestamp','$cert');";
  10. if(is_array($certi)) {
  11. foreach($certi as $key => $carray) {
  12. if($carray[0] > $timestamp - $ctimeout) {
  13. $cert .= "\n\$certi['$key'] = array('$carray[0]','$carray[1]');";
  14. }
  15. }
  16. }
  17. $cert .= "\n?>";
  18. fwrite($fp, $cert);
  19. fclose($fp);
  20. }
  21. }
  22. function randoms($leng){
  23. $edh = '0123456789abcdefghijklmnopqrstuvwxyz';
  24. return 'K'.substr(str_shuffle($edh),0,($leng));
  25. }
  26. //random function end
复制代码
找到:
  1. include template('register');
复制代码
在上面一行添加:
  1. //random function by KaijuanStudio
  2. $randcode = '<span>
  3. <label><em>确认注册:</em><input type="checkbox" name="'.$certi[$sid][1].'" value="1"> 我要注册为会员</label>
  4. </span>';
  5. //random function by end
复制代码
继续找到:
  1. $censorexp = '/^('.str_replace(array('\\*', "\r\n", ' '), array('.*', '|', ''), preg_quote(($censoruser = trim($censoruser)), '/')).')$/i';
复制代码
在上面一行添加
  1. //random function by KaijuanStudio
  2. $randinfo = "
  3. if(!\${$certi[$sid][1]}) {
  4. showmessage('profile_required_info_timeout');
  5. }";
  6. eval($randinfo);
  7. //random function by end
复制代码

2.修改 post.php
打开 post.php 并找到:
  1. if($action == 'newthread') {
复制代码
在上面一行添加:
  1. //random function by KaijuanStudio
  2. if($groupid == 10 && ($action == 'newthread' || $action == 'reply')) {
  3. $ctimeout = 300; //超时响应时间
  4. $cache = './forumdata/cache/KS2010&Random_v2.php';
  5. include_once DISCUZ_ROOT.$cache;
  6. if(!$certi[$sid]) {
  7. $cert = $ceriti[$sid] = randoms(9);
  8. $fp = @fopen($cache, 'w');
  9. if($fp) {
  10. $cert = "<?php\n\$certi['$sid'] = array('$timestamp','$cert');";
  11. if(is_array($certi)) {
  12. foreach($certi as $key => $carray) {
  13. if($carray[0] > $timestamp - $ctimeout) {
  14. $cert .= "\n\$certi['$key'] = array('$carray[0]','$carray[1]');";
  15. }
  16. }
  17. }
  18. $cert .= "\n?>";
  19. fwrite($fp, $cert);
  20. fclose($fp);
  21. }
  22. }
  23. if(!submitcheck('topicsubmit', 0, $seccodecheck, $secqaacheck) && !submitcheck('replysubmit', 0, $seccodecheck, $secqaacheck)) {
  24. $randcode = '<input type="checkbox" name="'.$certi[$sid][1].'" value="1"> <em style="color:orange">确认无误</em>';
  25. } else {
  26. $randinfo = "
  27. if(!\${$certi[$sid][1]}) {
  28. showmessage('profile_required_info_timeout');
  29. }";
  30. eval($randinfo);
  31. }
  32. }
  33. function randoms($leng){
  34. $edh = '0123456789abcdefghijklmnopqrstuvwxyz';
  35. return 'X'.substr(str_shuffle($edh),0,($leng));
  36. }
  37. //random function end
复制代码

3.修改 viewthread.php
打开 viewthread.php 并找到
  1. include template('viewthread');
复制代码
在上面一行添加:
  1. //random function by KaijuanStudio
  2. if($groupid == 10 && $fastpost && $allowpostreply) {
  3. $ctimeout = 300; //超市响应时间
  4. $cache = './forumdata/cache/KS2010&Random_v2.php';
  5. include_once DISCUZ_ROOT.$cache;
  6. if(!$certi[$sid]) {
  7. $cert = $ceriti[$sid] = randoms(9);
  8. $fp = @fopen($cache, 'w');
  9. if($fp) {
  10. $cert = "<?php\n\$certi['$sid'] = array('$timestamp','$cert');";
  11. if(is_array($certi)) {
  12. foreach($certi as $key => $carray) {
  13. if($carray[0] > $timestamp - $ctimeout) {
  14. $cert .= "\n\$certi['$key'] = array('$carray[0]','$carray[1]');";
  15. }
  16. }
  17. }
  18. $cert .= "\n?>";
  19. fwrite($fp, $cert);
  20. fclose($fp);
  21. }
  22. }
  23. $randcode = ' | <input type="checkbox" name="'.$certi[$sid][1].'" value="1"> <em style="color:orange">确认无误</em>';
  24. }
  25. //random function by end
复制代码

4.修改 register.htm
打开 templates/default/register.htm 并找到:
  1. <!--{if $reginvitemsg || $regstatus == 2}-->
复制代码
在上面一行添加:
  1. $randcode
复制代码
5.修改 templates.lang.php
打开 templates/default/templates.lang.php 并找到:
  1. 'profile_required_info_invalid' => '您没有填写必填项目,请返回修改。',
复制代码

在下面一行添加:
  1. 'profile_required_info_timeout' => '您还没确认或页面超时,请刷新重试。',
复制代码
6.修改 post_infloat.htm
打开 templates/default/post_infloat.htm 并找到:
  1. <!--{if $secqaacheck || $seccodecheck}-->{subtemplate seccheck}<!--{/if}-->
复制代码

在下面一行添加:
  1. $randcode
复制代码

7.修改 viewthread_fastpost.htm
打开 templates/default/viewthread_fastpost.htm 并找到:

  1. {lang post_fastreply_gotolast}</label>
复制代码
在后面添加:
  1. $randcode
复制代码
8.修改完毕,上传并更新缓存!



上一篇:Discuz 插件:开卷工作室发贴关键字屏蔽 v1.1 For Discuz
下一篇:Discuz X2防注册机加入reCAPTCHA验证码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1314学习网 ( 浙ICP备10214163号 )

GMT+8, 2024-11-1 07:48

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表