使用Discuz!自带参数防御CC攻击以及原理

CC攻击确实是很蛋疼的一种攻击方式,Discuz!的配置文件中已经有了一个自带的减缓CC攻击的参数,在配置文件config.inc.php中:

$attackevasive = 0;  // 论坛防御级别,可防止大量的非正常请求造成的拒绝服务攻击                                 
// 防护大量正常请求造成的拒绝服务攻击,

  这个参数可以设置的值有:

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

  

正常情况下设置为 0,在遭到攻击时,分析其攻击手法和规律,组合使用。 可以尝试先设置为 2, 2|4, 1|2|4|, 1|2|4|8, 如果 1|2|4|8 还不行,应用程序层面上已经抵挡不住,可能主机遭受的攻击来自于僵尸网络的 DDOS 攻击了,建议从防火墙策略上入手。

在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" class="button" value=" Submit " />‘, FALSE, TRUE);
} else {
dsetcookie(‘visitcode‘, authcode($visitcode.‘|1|‘.TIMESTAMP, ‘ENCODE‘), TIMESTAMP + 816400, 1, true);
}
}

}

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

转自:https://www.nigesb.com/discuz-cc-attacker-defence.html

原文地址:https://www.cnblogs.com/yangyangblog/p/9754615.html

时间: 2024-10-28 18:46:59

使用Discuz!自带参数防御CC攻击以及原理的相关文章

使用Discuz!自带参数防御CC攻击以及原理,修改Discuz X 开启防CC攻击后,不影响搜索引擎收录的方法

这部份的工作,以前花的时间太少. 希望能产生一定的作用. http://www.nigesb.com/discuz-cc-attacker-defence.html http://bbs.zb7.com/thread-8644-1-1.html CC攻击确实是很蛋疼的一种攻击方式,Discuz!的配置文件中已经有了一个自带的减缓CC攻击的参数,在配置文件config.inc.php中: 1 $attackevasive = 0;             // 论坛防御级别,可防止大量的非正常请求

Discuz!开源系统如何防御CC攻击?

Discuz!是一套免费的开源建站系统,在国内挺受欢迎的,主要用来搭建社区论坛类的网站.社区论坛类的网站由于流量比较大,很容易遭到DDOS攻击,特别是针对网页的CC攻击.一旦网站遇到类似攻击,不但导致用户流失,还会被搜索引擎降权.那当遇到CC攻击时该怎么办呢?其实Discuz!系统有一个缓解CC攻击的功能,今天墨者安全就教大家如何进行配置. 在Discuz!的配置文件找到config.inc.php,可以看到默认数值是0. $attackevasive = 0; 我们可以修改这个参数来缓解CC攻

NGINX防御CC攻击教程

CC攻击即http flood,以攻击成本低(只需数台http代理服务器即可实现攻击).隐蔽性强(中小CC攻击一般不会造成网络瓶颈).难防御(与正常访问的请求很难区分开).威力强大(造成和DDOS流量攻击一样的效果,网站长时间无法打开)等特点著称.常规的http flood防御为JS弹回,二次请求验证加入白名单 和 多层缓存(七层.四层共同缓存)实现防御体.   CC攻击,首先造成的后果往往是被攻击服务器CPU爆满.内存占用高.甚至磁盘IO高占用.通常服务器上有永远处理不完的任务,所以,CC攻击

网站被CC攻击的原理与解决方法

作为站长或者公司的网站的网管,什么最可怕?显然是网站受到的DDoS攻击.大家都有这样的经历,就是在访问某一公司网站或者论坛时,如果这个网站或者论坛流量比较大,访问的人比较多,打开页面的速度会比较慢,对不?!一般来说,访问的人越多,网站或论坛的页面越多,数据库就越大,被访问的频率也越高,占用的系统资源也就相当可观. CC攻击是DDoS(分布式拒绝服务)的一种,相比其它的DDoS攻击CC似乎更有技术含量一些.这种攻击你见不到虚假IP,见不到特别大的异常流量,但造成服务器无法进行正常连接,一条ADSL

防御CC攻击

菠菜盾 高防CDN 使用集群防御 隐藏网站真实IP 节点分布 国内 日本 韩国 美国 香港 加拿大 等地方 无视一切CC  流量攻击 集群防御 有效的解决了 CC流量等攻击 游戏客户端多端口定制CDN防御,一键隐藏真实IP,秒开,无需搬站无视CC,被墙域名高防解决 自助购买 自动开通 简洁方便  防御更强.秒速解析.更高防御 无需用户操作.智能防御  智能解析  智能切换,无视CC攻击 无视一切流量 高防 高配 高速 客服QQ:5569669 咨询热线:4000655875 公司网站: http

如何配置Nginx防御CC攻击

前言这次我们来讲讲如何通过简单的配置文件来实现nginx防御攻击的效果.其实很多时候,各种防攻击的思路我们都明白,比如限制IP啊,过滤攻击字符串啊,识别攻击指纹啦.可是要如何去实现它呢?用守护脚本吗?用PHP在外面包一层过滤?还是直接加防火墙吗?这些都是防御手段.不过本文将要介绍的是直接通过nginx的普通模块和配置文件的组合来达到一定的防御效果.验证浏览器行为简易版我们先来做个比喻.社区在搞福利,在广场上给大家派发红包.而坏人派了一批人形的机器人(没有语言模块)来冒领红包,聪明工作人员需要想出

基于日志数据分析以防御CC攻击的想法

1. What - 什么是CC攻击 CC攻击,即针对应用层HTTP协议的DDos攻击,攻击者在短时间内向目标服务器发送大量的HTTP请求,使得服务器会非常繁忙,资源消耗会增加:同时,如果请求中包含基于数据库的查询,也会对数据库的性能造成影响. 2. Why - 为什么要防范CC攻击 降低Qos质量,妨碍正常用户的访问,严重时会使服务不可用. 3. how - 如何防范 1) 确认HTTP请求会话唯一性 客户端IP+session,服务端可以做判断,相同时刻下的请求,如果客户端IP出现的次数不是唯

H5游戏如何来防御cc攻击又不会误封用户

CC攻击是H5游戏常见的攻击类型,而H5游戏遭受CC攻击的时候,H5游戏访问就会变慢或者无法访问,那么CC攻击是如何攻击H5游戏的呢?CC攻击主要攻击的是页面,H5游戏运营者都知道H5游戏访问量特别大的时候网站访问也会变慢,H5游戏服务器压力大,而CC攻击就是模拟多个用户不停的去访问那些需要大量数据操作的页面,以此让H5游戏服务器CPU占满,从而导致H5游戏无法访问. 第一.高防cdn帮助H5游戏防御攻击需要H5游戏服务器ip地址没有被黑客知道,黑客攻击过H5游戏服务器那么就说明ip已经被黑客记

iptables 实现防御CC攻击

一:前言 防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种.无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘.而我们的任务就是需要去定义到底防火墙如何工作,这就是防火墙的策略,规则,以达到让它对出入网络的IP.数据进行检测. 目前市面上比较常见的有3.4层的防火墙,叫网络层的防火墙,还有7层的防火墙,其实是代理层的网关. 对于TCP/IP的七层模型来讲,我们知道第三层是网络层,三层的防火墙会在这层对源地址和目标地址进行检测.但是对于七层的防火