概念
 
        CC攻击的原理就是攻击者控制某些主机不停地发大量数据包给对方服务器造成服务器资源耗尽,一直到宕机崩溃。CC主要是用来攻击页面的,每个人都有这样的体验:当一个网页访问的人数特别多的时候,
        打开网页就慢了, CC就是模拟多个用户(多少线程就是多少用户)不停地进行访问那些需要大量数据操作(就是需要大量CPU时间)的页面,造成服务器资源的浪费,CPU长时间处于100%,
    永远都有处理不完的连接直至就网络拥塞,正常的访问被中止。
 
  攻击方式
 
         通常发起 CC 攻击是使用专门的攻击工具,同时模拟成多个用户,向目标网站发起多个请求,一般这些软件为了防止地址被屏蔽,还内置通过代理攻击的功能。可以通过多个代理服务器对目标发起攻击,
  使封 IP 的防御方式变的失效。
 
  防御思路
         我们抛开购买的软件来防护 下面主要从程序角度来做防护。
 
         某人使用过某某网站卫士来预防攻击他的评价:
 
           从界面上看,似乎是防止了大量的CC攻击,但登录网站后发现,流量依旧异常,攻击还是依旧,看起来这个网站卫士的效果并没有达到。
           从原理上看,基本上所有的防火墙都会检测并发的TCP/IP连接数目,超过一定数目一定频率就会被认为是Connection-Flood。但如果IP的数量足够大,使得单个IP的连接数较少,
     那么防火墙未必能阻止CC攻击。
            启用了某某网站卫士之后,反而更容易被CC攻击,因为这个网站卫士并不能过滤掉CC攻击,攻击的IP经过其加速后,更换成为这个网站卫士的IP,在网站服务器端显示的IP都是相同的,
     导致服务器端无法过滤这些IP。
 
        因为 CC 攻击通过工具软件发起,而普通用户通过浏览器访问,这就是区别。我们只有想到办法对这二者作出正确的判断,屏蔽来自机器的流量攻击就没问题了。
 
  思路一:
 
                 普通浏览器发起请求时,除了要访问的地址以外, Http 头中还会带有 Referer , UserAgent 等多项信息。遇到攻击时可以通过访问日志查看访问信息,看攻击的流量是否有明显特征,
       比如固定的 Referer 或 UserAgent ,如果能找到特征,就可以直接屏蔽掉了。
 
          HTTP_Referer 名词解释  看单词知道大概意思是 http的访问来源
 
          HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面连接过来的。
 
         UserAgent 名词解释
 
         HTTP_USER_AGENT是用来检查浏览页面的访问者在用什么操作系统(包括版本号)浏览器(包括版本号)和用户个人偏好的代码。
 
    UserAgent 标准格式是 : 浏览器标识 (操作系统标识; 加密等级标识; 浏览器语言) 渲染引擎标识 版本信息(但是不同的浏览器的格式是不同的,大体都包括这些内容)
 
        下图就是 浏览器的  HTTP_Referer 和   HTTP_USER_AGENT
 
     

  大家明白了的吧 如果这两个有固定的特征就可以直接用程序屏蔽了)
 
  这里用useragent做了一个判断逻辑是这样的
 
  缓存最近访问的二十条记录, 如果到了二十条就开始做对比,如果这二十条的user-agent 一样就把这个user-agent 给封了,
 
  如果不一样就继续回到0 开始, 为了避免网站一个人访问的情况下误杀,加上一个时间判断效果最好 比如 三秒内。
 
  上代码
 
 
     
然后对比  
 

 
计算时间差
 

我这里是根据实际情况判断的 (考虑到白名单, 黑名单, ip断等场景需要)

好了 userAgent 防御大概就说这么多。
 
  思路二:
 
  上面也说了用userAgent可以根据情况来屏蔽, 但是这个玩意还是可以伪造的(ps: 虽然 比较困难),如果伪造了我们就要像其它办法了;我们知道一般的
  攻击软件一般来说功能都比较简单,只有固定的发包功能,是不支持完成的http协议的 而浏览器会完整的支持 Http 协议,我们可以利用这一点来进行一下防御。
 
  用户初次访问的时候我们定义个规则 token(ps:这个应该是有唯一key 生成的),保存在 COOKIE 中作为 Token ,用户必须要带有正确的 Token 才可以访问后端服务。当用户第一次访问时,会
  检测到用户的 COOKIE 里面并没有这个 Token ,则返回一个 302 重定向跳转,目标地址为当前页面,同时在返回的 Http 头中加入 ,对 COOKIE 进行设置,使用户带有这个 Token 。
 
  客户端如果是一个正常的浏览器,那么就会支持 HTTP 头中的 SET COOKIE 和 302 重定向指令,将带上正确的 Token 再次访问页面,这时候后台检测到正确的 Token ,就会放行,
  这之后用户的 Http 请求都会带有这个 Token ,所以并不会受到阻拦。客户端如果是 CC 软件,那么一般不会支持这些指令,那么就会一直被拦在最外层,并不会对服务器内部造成压力。
 
  代码:这里主要用php 代码来说明
 

 
      token 生成算法 大致这样    UserAgent + client_ip + key   这样就避免了无法伪造,保证了相同的客户端的 token 的一致性。
 

  对 CC 攻击者来说,在使用固定或者唯一 Token 的情况下,攻击成本是有差别的。
 
  很多攻击软件是可以设置 http 头的,如果使用固定 Token ,攻击者只需要在本机获取一次 Token ,然后设置好 http 头就可以直接发起攻击了,攻击成本低的可以,
 
  但是如果使用可变 Token ,基本市面上所有 CC 软件全都无法使用了 ,我们这个就是可变的token (随 IP 地址变化是为了防止通过一台机器获取 Token 之后,再通过代理服务来进行攻击)
 
  实际上 token 只能挡普通攻击,计算 token 这个事情本身就消耗 CPU 资源,攻击的时候为了省带宽也有只发不收,只要入口带宽没有被塞满,普通 cc 攻击都可以挡住。
 
  但是如果暴力发包,只发不收的攻击来说,带宽都满了,并并不能通过这种方式进行防御。
 
  弊端: 这样的token 对搜索引擎不够友好,这 token 校验第一波挡住的是搜索引擎的爬虫。所以,最好只是在被攻击的时候开启这个功能,平时关闭掉.
 
  其它:
 
         如果你的网站是使用的是Nginx做的反向代理,那么可以利用Nginx原生的limit_req模块来针对请求进行限制,ngx_http_limit_req_module
 
        总结:
 
        综上所述:最好在受到攻击的时候才开启token。
 
        ps: 并没有绝对的防御方式,我们所能做的也就是不断提高攻击者的成本。通过手段把不合法的流量拦住。

浅谈CC攻击原理与防范的更多相关文章

  1. CC攻击原理及防范方法和如何防范CC攻击

    一. CC攻击的原理: CC攻击的原理就是攻击者控制某些主机不停地发大量数据包给对方服务器造成服务器资源耗尽,一直到宕机崩溃.CC主要是用来消耗服务器资源的,每个人都有这样的体验:当一个网页访问的人数 ...

  2. CC攻击原理及防范方法

    一. CC攻击的原理: CC攻击的原理就是攻击者控制某些主机不停地发大量数据包给对方服务器造成服务器资源耗尽,一直到宕机崩溃.CC主要是用来消耗服务器资源的,每个人都有这样的体验:当一个网页访问的人数 ...

  3. 浅谈XSS攻击原理与解决方法

    概述 XSS攻击是Web攻击中最常见的攻击方法之一,它是通过对网页注入可执行代码且成功地被浏览器 执行,达到攻击的目的,形成了一次有效XSS攻击,一旦攻击成功,它可以获取用户的联系人列表,然后向联系人 ...

  4. 浅谈 DDoS 攻击与防御

    浅谈 DDoS 攻击与防御 原创: iMike 运维之美  什么是 DDoS DDoS 是英文 Distributed Denial of Service 的缩写,中文译作分布式拒绝服务.那什么又是拒 ...

  5. 浅谈Ddos攻击攻击与防御

    EMail: jianxin#80sec.comSite: http://www.80sec.comDate: 2011-2-10From: http://www.80sec.com/ [ 目录 ]一 ...

  6. 转载-浅谈Ddos攻击攻击与防御

    EMail: jianxin#80sec.comSite: http://www.80sec.comDate: 2011-2-10From: http://www.80sec.com/ [ 目录 ]一 ...

  7. UDP反射DDoS攻击原理和防范

    东南大学:UDP反射DDoS攻击原理和防范 2015-04-17 中国教育网络 李刚 丁伟 反射攻击的防范措施 上述协议安装后由于有关服务默认处于开启状态,是其被利用的一个重要因素.因此,防范可以从配 ...

  8. 网络XSS攻击和CSRF攻击原理及防范

    网络XSS攻击和CSRF攻击原理及防范 原文地址:http://www.freebuf.com/articles/web/39234.html 随着Web2.0.社交网络.微博等等一系列新型的互联网产 ...

  9. 浅谈html运行原理

    浅谈HTML运行原理,所谓的HTML简单的来说就是一个网页,虽然第一节就讲html原理可能大家会听不懂,就当是给一个初步印象把,至少大概知道一个网页的运行流程是怎样的,下面上一张图: 大致的一个htm ...

随机推荐

  1. Java 进程占用内存过多,幕后元凶原来是线程太多

    那天中午吃饭,一个同事说,那个项目组的人快气死我了,程序有问题,早晨在群里@了他们,到中午才回消息,然后竟然还说他们的程序没有问题,是我们这边调用的太频繁了. 简直想笑. 背景说明 我们当前这个系统和 ...

  2. 记一次docker镜像导出导入流程

    目标:导出测试环境的镜像到本地机器 过程: 测试机: docker save -o /Dockerfile/crontabService/php72.tar lnmp72:v1.4 压缩,要不文件太大 ...

  3. spdlog 基本结构分析

    spdlog 基本结构分析 代码取自 V1.5.0, 代码堪称美学. spdlog 是一个只有头文件的C++日志库,速度非常快,扩展性很强,更重要的是 社区活跃,文档齐全. 使用 参考官方的 exam ...

  4. html包含html文件的方法

    我们在写asp页面的时候,常常使用include命令来包含公共文件.由于这个方法用起来非常方便,于是很多人在HTML页面里尝试使用include,但是发现根本就不起作用.这是因为,include是VB ...

  5. C# 添加、删除、读取Word形状(基于Spire.Cloud.Word.SDK)

    本文介绍调用Spire.Cloud.Word.SDK提供的接口shapesApi来操作Word形状,包括添加形状AddShape(),添加形状时,可设置形状类型.颜色.大小.位置.倾斜.轮廓.文本环绕 ...

  6. scrapy selector选择器

    这部分内容属于补充内容 1.xpath() 2.css() 3.正则表达式 # 多个值,列表 response.xpath('//a/text()').re('(.*?):\s(.*)') # 取第一 ...

  7. 关于SpringDataJpa中测试出现StackOverflowError错误问题

    在使用SpringDataJpa进行多表查询时,使用导航查询,每次都出现 StackOverflowError错误, 经过查找资料,网上百度,终于找到原因, StackOverflowError 是栈 ...

  8. noip2018 考前提醒!

    适应Noilinux 1.终端操作 打开终端 \(Ctrl+Alt+T\) 打开文件夹 \(cd\) +名称 新建文件夹 \(mkdir\) +名称 打开 \(vim\) 配置 \(vim ~/.vi ...

  9. 【转载】Notepad++源码分析

    在网上发现了一个哥们写了关于Notepad++源码的文章,不过就写了一就没有了,我就接着他的工作再说说吧! 大三了,也写了一点儿程序了,但是如果只是按照自己的思路写下去恐怕难以提高,于是准备开始阅读一 ...

  10. python类型-序列

    注:本文档主要是学习<Python核心编程(第二版)>时做的资料整理. 1.序列 序列的成员是有序排列的,并且可以通过下标偏移量访问到它的一个或者几个成员,包括字符串(普通字符串和Unic ...