Discuz!x2防CC攻击设置详细教程

在config_global.php文件中有如下代码

	$_config['security']['attackevasive'] = 0;

可以设置的值有:

0表示关闭此功能
1表示cookie刷新限制
2表示限制代理访问
4表示二次请求
8表示回答问题(第一次访问时需要回答问题)

同时也可以设置为组合的方式,如1|2表示同时启用cookie刷新限制和限制代理访问。

在source/class/class_core.php文件中可以找到如下代码

if($this->config['security']['attackevasive'] && (!defined('CURSCRIPT') || !in_array($this->var['mod'], array('seccode', 'secqaa', 'swfupload')))) {
require_once libfile('misc/security', 'include');

$this->config[‘security’][‘attackevasive’]为config_global.php文件里设置的$_config[‘security’][‘attackevasive’]的值。

找到source/misc/misc_security.php文件

	if(is_string($this->config['security']['attackevasive'])) {
	//如果$this->config['security']['attackevasive']是字符串
	        $attackevasive_tmp = explode('|', $this->config['security']['attackevasive']);
	        根据分隔符|分割$this->config['security']['attackevasive']得到数组$attackevasive_tmp
	        $attackevasive = 0;
	        foreach($attackevasive_tmp AS $key => $value) {
	                $attackevasive += intval($value);
	                //将数组$attackevasive中每项的值加起来得到$attackevasive
	        }
	        unset($attackevasive_tmp);
	} else {
	        $attackevasive = $this->config['security']['attackevasive'];
	}

	$lastrequest = isset($_G['cookie']['lastrequest']) ? authcode($_G['cookie']['lastrequest'], 'DECODE') : '';

获取上一次请求的时间。
$_G[‘cookie’][‘lastrequest’]为记录上一次请求时间的cookie。

if($attackevasive & 1 || $attackevasive & 4) {
	        dsetcookie('lastrequest', authcode(TIMESTAMP, 'ENCODE'), TIMESTAMP + 816400, 1, true);
	}

如果设置的是cookie刷新限制($attackevasive & 1)或者二次请求($attackevasive & 4)的方式,那么创建以当前时间为值的上一次请求的cookie。

	if($attackevasive & 1) {
	        if(TIMESTAMP - $lastrequest < 1) {
	                securitymessage('attackevasive_1_subject', 'attackevasive_1_message');
	        }
	}

cookie刷新限制的方式:当前时间-上一次请求的时间<1的时候会有页面重载的提示。

	if(($attackevasive & 2) && ($_SERVER['HTTP_X_FORWARDED_FOR'] ||
	        $_SERVER['HTTP_VIA'] || $_SERVER['HTTP_PROXY_CONNECTION'] ||
	        $_SERVER['HTTP_USER_AGENT_VIA'] || $_SERVER['HTTP_CACHE_INFO'] ||
	        $_SERVER['HTTP_PROXY_CONNECTION'])) {
	                securitymessage('attackevasive_2_subject', 'attackevasive_2_message', FALSE);
	}

限制代理访问的方式。

	if($attackevasive & 4) {
	        if(empty($lastrequest) || TIMESTAMP - $lastrequest > 300) {
	                securitymessage('attackevasive_4_subject', 'attackevasive_4_message');
	        }
	}

二次请求的方式:当前时间-上一次请求时间>300秒的时候会有页面重载的提示。

	if($attackevasive & 8) {
	        list($visitcode, $visitcheck, $visittime) = explode('|', authcode($_G['cookie']['visitcode'], 'DECODE'));
	        if(!$visitcode || !$visitcheck || !$visittime || TIMESTAMP - $visittime > 60 * 60 * 4 ) {
	                if(empty($_POST['secqsubmit']) || ($visitcode != md5($_POST['answer']))) {
	                        $answer = 0;
	                        $question = '';
	                        for ($i = 0; $i< rand(2, 5); $i ++) {
	                                $r = rand(1, 20);
	                                $question .= $question ? ' + '.$r : $r;
	                                $answer += $r;
	                        }
	                        $question .= ' = ?';
	                        dsetcookie('visitcode', authcode(md5($answer).'|0|'.TIMESTAMP, 'ENCODE'), TIMESTAMP + 816400, 1, true);
	                        securitymessage($question, '<input type="text" name="answer" size="8" maxlength="150" /><input type="submit" name="secqsubmit" value=" Submit " />', FALSE, TRUE);
	                } else {
	                        dsetcookie('visitcode', authcode($visitcode.'|1|'.TIMESTAMP, 'ENCODE'), TIMESTAMP + 816400, 1, true);
	                }
	        }
	
	}

回答问题的方式:第一次访问时需要回答问题。

思章老师

认准了方向,就要勇敢地走下去,十年磨一剑,我相信,只要坚持,一切都有可能。

相关日志

  1. 没有图片

    2011.04.20

    最轻量级功能最强大图片展示效果slimbox

    本来博客已经启用了slimbox代码,实现图…

  2. 2011.04.02

    博客启用WordPress主题:LSZ Thinky Pro V3.1

    今天博客开启了在 WordPress 原生主…

  3. 没有图片

    2009.07.05

    总结一下Firefox众生相 你是哪一相?

    Firefox 3.5正式版已经放出,必将在…

  4. 没有图片

    2009.07.05

    WordPress 2.8 兼容的风格列表

    随着Wordpress 2.8版本的发布,很…

  5. 没有图片

    2013.12.06

    U盘没有写保护开关却提示被写保护 无法格式化

    近来大量的学生拿来U盘向我求救“老师,看我的…

  6. 没有图片

    2010.03.17

    SSH+MyEnTunnel+Firefox+AutoProxy完全方案

    本来对翻墙也没有很强烈的欲望,有时偶尔用一下…

评论

  1. 艾奥兹 2018.01.12 9:48上午

    不错,论坛可以避免很多恶意攻击。

  2. 凌乱 2012.06.27 5:22下午

    呃,重复了,记得很早之前李大哥你已经分享过了