夜间模式
请选择 进入手机版 | 继续访问电脑版

BoonKiong.com2025™

人气 58

Discuz!修改相关文件防御CC攻击机制

文強已获得官方认证 2024-11-3 12:47



在discuz的config/config_global.php配置文件中可以配置attackevasive参数开启CC 攻击防御

  1. $_config['security']['attackevasive'] = 0;                // CC 攻击防御 1|2|4|8
复制代码


当你的站点发现被CC攻击时,你也可以在config中打开CC攻击防御,该防御有1/2/4/8四种防御方式,每个数字的意义为:
0表示关闭此功能
1表示cookie刷新限制
2表示限制代理访问
4表示二次请求
8表示回答问题(第一次访问时需要回答问题)
正常情况下设置为 0,在遭到攻击时,分析其攻击手法和规律,组合使用。 可以尝试先设置为 2, 2|4, 1|2|4|, 1|2|4|8, 如果 1|2|4|8 还不行,应用程序层面上已经抵挡不住,可能主机遭受的攻击来自于僵尸网络的 DDOS 攻击了,建议从防火墙策略上入手。
由于此项配置是针对所有访问者的,隐藏一旦发生误判将会影响网站的访问性,以及影响搜索引擎的抓取!
本文通过修改discuz文件,实现忽略指定ip段和搜索引擎不受此安全策略影响!

1、修改文件  \source\include\misc\misc_security.php

2、修改方法

文件中可以找到如下代码(默认第46~50行)

  1. if($attackevasive & 4) {
  2.         if(empty($lastrequest) || TIMESTAMP - $lastrequest > 300) {
  3.                 securitymessage('attackevasive_4_subject', 'attackevasive_4_message');
  4.         }
  5. }
复制代码


修改为:

  1. if($attackevasive & 4) {
  2.         if(empty($lastrequest) || TIMESTAMP - $lastrequest > 300) {
  3.                 $kw_spiders = 'Bot|Crawl|Spider';
  4.                 // keywords regular expression of search engine spiders
  5.                 if(preg_match("/($kw_spiders)/i", $_SERVER['HTTP_USER_AGENT'])) {
  6.                         // match search engine spiders
  7.                 }else{
  8.                         securitymessage('attackevasive_4_subject', 'attackevasive_4_message');
  9.                 }
  10.         }
  11. }
复制代码



教程来源:Discuz! 官方交流社区     作者:gzwnzss

<
文強已获得官方认证 2024-11-3 12:58
使用Discuz!自带参数防御CC攻击以及原理

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

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


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

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


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

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

  1. if($this->config['security']['attackevasive'] && (!defined('CURSCRIPT') || !in_array($this->var['mod'], array('seccode', 'secqaa', 'swfupload')))) {
  2. require_once libfile('misc/security', 'include');
  3. }
复制代码


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

找到 source/misc/misc_security.php文件

  1. if(is_string($this->config['security']['attackevasive'])) {
  2. //如果$this->config['security']['attackevasive']是字符串
  3. $attackevasive_tmp = explode('|', $this->config['security']['attackevasive']);
  4. 根据分隔符|分割$this->config['security']['attackevasive']得到数组$attackevasive_tmp
  5. $attackevasive = 0;
  6. foreach($attackevasive_tmp AS $key => $value) {
  7. $attackevasive += intval($value);
  8. //将数组$attackevasive中每项的值加起来得到$attackevasive
  9. }
  10. unset($attackevasive_tmp);
  11. } else {
  12. $attackevasive = $this->config['security']['attackevasive'];
  13. }
复制代码


  1. $lastrequest = isset($_G['cookie']['lastrequest']) ? authcode($_G['cookie']['lastrequest'], 'DECODE') : '';
复制代码


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

  1. if($attackevasive & 1 || $attackevasive & 4) {
  2.         dsetcookie('lastrequest', authcode(TIMESTAMP, 'ENCODE'), TIMESTAMP + 816400, 1, true);
  3. }
复制代码


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

  1. if($attackevasive & 1) {
  2.         if(TIMESTAMP - $lastrequest < 1) {
  3.                 securitymessage('attackevasive_1_subject', 'attackevasive_1_message');
  4.         }
  5. }
复制代码


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

  1. if(($attackevasive & 2) && ($_SERVER['HTTP_X_FORWARDED_FOR'] ||
  2. $_SERVER['HTTP_VIA'] || $_SERVER['HTTP_PROXY_CONNECTION'] ||
  3. $_SERVER['HTTP_USER_AGENT_VIA'] || $_SERVER['HTTP_CACHE_INFO'] ||
  4. $_SERVER['HTTP_PROXY_CONNECTION'])) {
  5. securitymessage('attackevasive_2_subject', 'attackevasive_2_message', FALSE);
  6. }
复制代码


限制代理访问的方式。

  1. if($attackevasive & 4) {
  2. if(empty($lastrequest) || TIMESTAMP - $lastrequest > 300) {
  3. securitymessage('attackevasive_4_subject', 'attackevasive_4_message');
  4. }
  5. }
复制代码


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

  1. if($attackevasive & 8) {
  2. list($visitcode, $visitcheck, $visittime) = explode('|', authcode($_G['cookie']['visitcode'], 'DECODE'));
  3. if(!$visitcode || !$visitcheck || !$visittime || TIMESTAMP - $visittime > 60 * 60 * 4 ) {
  4. if(empty($_POST['secqsubmit']) || ($visitcode != md5($_POST['answer']))) {
  5. $answer = 0;
  6. $question = '';
  7. for ($i = 0; $i< rand(2, 5); $i ++) {
  8. $r = rand(1, 20);
  9. $question .= $question ? ' + '.$r : $r;
  10. $answer += $r;
  11. }
  12. $question .= ' = ?';
  13. dsetcookie('visitcode', authcode(md5($answer).'|0|'.TIMESTAMP, 'ENCODE'), TIMESTAMP + 816400, 1, true);
  14. securitymessage($question, '<input type="text" name="answer" size="8" maxlength="150" /><input type="submit" name="secqsubmit" class="button" value=" Submit " />', FALSE, TRUE);
  15. } else {
  16. dsetcookie('visitcode', authcode($visitcode.'|1|'.TIMESTAMP, 'ENCODE'), TIMESTAMP + 816400, 1, true);
  17. }
  18. }
  19.   
  20. }
复制代码


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

教程来源:Jarett's Blog     作者:Jarett
回复

使用道具 举报

<
您需要登录后才可以回帖 登录 | 立即注册

您还未登录

随手拍~~:

热门推荐~~:

Instagram 播放器代码...

首先進入後台 → 界面 → 编辑器设置 →Discuz! 代码 新增一个 ig 的“标签”,然后点击“详 ...

2023年谷歌浏览器依然能够使用Flash的方法...

1、首先需要安装 Clean Flash Player:[/colorT] 下载解压后鼠标右键“以管理员身份运行”Clean Flas ...

Discuz! X3.5 解决小图标不显示的方法...

我发现大多数使用Discuz! X3.5 都有小图标不能显示的问题,提问的时候大家给的回答都是说跨域的问题, ...

论坛表情分享...

1、洋葱头 ...

如何在 discuz 帖子里添加 APlayer 音乐播...

1、首先将下边的 APlayer.css 和 APlayer.js 代码下载然后解压上传到服务器。 2、单曲音乐的代 ...

热度会员~~:

文強bkboonkiongadmin老谟深虑TaChuaekin小甜天fei220088osife海岛anas

免责声明~~:


本站内容来源于合作伙伴及网络搜集,版权归原作者所有。如有侵犯版权,请立刻和本站联系,我们将在三个工作日内予以改正。
Email:hsbk@hotmail.com

服务与条款|隐私政策|免责声明|手机版|网站地图|友链申请| 文强阁

Powered by Discuz! X3.5|© 2001-2025 Discuz! Team. |距离农历新年还有: