前两天,网站的注册发送手机短信验证码的接口受到攻击,一个半小时,1万条短信都发出去了。可见,我们的安全防护做的多么不好。

分析攻击方式:

1) 多台机器模拟人工操作,随机输入手机号,就点击发送短信;

2) 多台机器上的部署的相同的脚本,在对网站发起攻击;

针对可能的第一种攻击方式: 在前端加了一个滑动解决的功能(一个jquery插件),必须手动拖动滑动解锁,输入框才是可点的;

针对可能的第二种攻击方式,应对策略:

1)在服务端接口加上验证,限制相同的IP,多长时间之内可以访问几次;限制相同的手机号,多长时间之内可以发送短信几次;具体实现是在redis/memcache中存储两个值;key1=该IP第一次访问的时间,key2=该IP总访问的次数;比如10分钟内可访问3次,超过3次就不让发送短信了。手机号的限制方式也是一样的;

2)配置nginx,限制IP在一定时间内的访问次数,以及同一时刻的并发数;

参考网址:http://boyseegirl.iteye.com/blog/2033717  (nginx限制特定ip的并发连接数

http://blog.csdn.net/gebitan505/article/details/17610485  (nginx限制某个IP同一时间段的访问次数

http://blog.csdn.net/dingyingguidyg/article/details/8523421 (nginx利用limit模块设置IP并发防CC攻击

http://blog.csdn.net/plunger2011/article/details/37812843 (nginx配置limit_conn_zone来限制并发连接数以及下载带宽

http{

.......

........

limit_req_zone $binary_remote_addr zone=one:10m rate=2r/s; #1秒发起2个请求)
               limit_conn_zone $binary_remote_addr zone=perip:10m;

}

server{

location /{

limit_req zone=one burst=1 nodelay;
                    limit_conn perip 2; #连接数限

}

}

3)通过分析nginx的access日志,筛选出访问量最高的IP,封掉;

按照某个时间点统计ip的访问次数,并排序

cat  access.log  |grep  "11/Nov/2015:12:30*"  | awk '{print $1}' | sort | uniq -c | sort -rn  > iptong.txt

筛选出IP之后新建一个blockIp.conf文件,文件内容为:

deny xx.xx.xx.xx ;

deny xx.xx.xx.xx ;

deny xx.xx.xx.xx ;

在nginx.conf中http{

include blockIp.conf;

}

重启nginx ,  nginx -s reload 即可

网站遭受CC攻击的解决办法的更多相关文章

  1. 什么是CC攻击,如何防止网站被CC攻击的方法总汇

    CC攻击(Challenge Collapsar)是DDOS(分布式拒绝服务)的一种,也是一种常见的网站攻击方法,攻击者通过代理服务器或者肉鸡向向受害主机不停地发大量数据包,造成对方服务器资源耗尽,一 ...

  2. 网站防止CC攻击的方法

    CC攻击(Challenge Collapsar)是DDOS(分布式拒绝服务)的一种,也是一种常见的网站攻击方法,攻击者通过代理服务器或者肉鸡向向受害主机不停地发大量数据包,造成对方服务器资源耗尽,一 ...

  3. Windows Server 2008 R2中IIS7.5配置完网站权限不足问题的解决办法:

    Windows Server 2008 R2中IIS7.5配置完网站权限不足问题的解决办法:常见问题:HTTP 错误 500.0 - Internal Server Error无法显示页面,因为发生内 ...

  4. Java Web项目漏洞:检测到目标URL存在http host头攻击漏洞解决办法

    检测到目标URL存在http host头攻击漏洞 详细描述 为了方便的获得网站域名,开发人员一般依赖于HTTP Host header.例如,在php里用_SERVER["HTTP_HOST ...

  5. NTP服务放大攻击的解决办法

    什么是NTP服务? 网络时间协议NTP(Network Time Protocol)是用于互联网中时间同步的标准互联网协议.NTP服务器通过NTP服务向网络上的计算机或其他设备提供标准的授时服务,以保 ...

  6. 单页面网站关于id冲突的解决办法

    最近做了一个单页面的网站,所有的页面加载都是通过局部刷新的方式,并且不用iframe,并且我们引入了动态tab页签: 所有的页签里的内容都只是一个元素,都在同一个html页面上,没有任何iframe分 ...

  7. 网站如何防止sql注入攻击的解决办法

    首先我们来了解下什么是SQL注入,SQL注入简单来讲就是将一些非法参数插入到网站数据库中去,执行一些sql命令,比如查询数据库的账号密码,数据库的版本,数据库服务器的IP等等的一些操作,sql注入是目 ...

  8. WIN7 IIS ASP网站 打不开的解决办法

    WIN7 IIS ASP网站 打不开,通常是访问ACCESS数据库的报错了但在未对IIS和IE作设置的情况,是不能正确的显示错误的,从而也不能解决问题 为解决这个问题,我在网上找了很久,虽然最终解决了 ...

  9. windows 2008R2部署网站后出现 ‘PageHandlerFactory-Integrated’ 的解决办法

    原因:运行4.0的网站,需要用aspnet_regiis注册4.0框架,然后用4.0的Class池,就可以运行4.0的web项目了. 解决方法:1.在cmd中切换到4.0所在的目录,命令如下:cd C ...

随机推荐

  1. .Net Core ORM选择之路,哪个才适合你 通用查询类封装之Mongodb篇 Snowflake(雪花算法)的JavaScript实现 【开发记录】如何在B/S项目中使用中国天气的实时天气功能 【开发记录】微信小游戏开发入门——俄罗斯方块

    .Net Core ORM选择之路,哪个才适合你   因为老板的一句话公司项目需要迁移到.Net Core ,但是以前同事用的ORM不支持.Net Core 开发过程也遇到了各种坑,插入条数多了也特别 ...

  2. android图片等比例缩放 填充屏幕

    在ImageView的t同事设置两个属性 android:adjustViewBounds="true"android:scaleType="fitXY"

  3. [javase学习笔记]-7.2 构造函数与一般函数的差别

    这一节我们简单学习一下构造函数与一般函数之间的差别所在. 那么它们有什么差别呢,结合上一节,我们能够总结出下面两点差别: 第一个差别: 构造函数:对象创建时,就会调用与之相应的构造函数,对对象进行初始 ...

  4. 探索MVP(Model-View-Presenter)设计模式在SharePoint平台下的实现

    对于SharePoint Developers来说,往往会过多的去关注SharePoint平台和工具,而把设计模式和代码的可测试性放在了一个较低的优先级.这并不是说SharePoint Develop ...

  5. [转]greenplum(postgresql)之数据字典

    greenplum是基于postgresql开发的分布式数据库,里面大部分的数据字典是一样的.我们在维护gp的时候对gp的数据字典比较熟悉,特此分享给大家.在这里不会详细介绍每个字典的内容,只会介绍常 ...

  6. JavaScript 如何从引用类型(Array 、 Object)创建一个新的对象

    数组的增删改 1.新增一项可以使用concat方法,它不会对原有数组进行改动,而是创建一个新数组 let a = [0, 1, 2] let b = a.concat([3]) console.log ...

  7. Windows平台下tomcat+java的web程序持续占cpu问题调试

    1.问题 Tomcat服务器跑了一段时间后,发现Tomcat进程占用的CPU资源在80%-100%间,加上其它的进程,整个服务器的CPU处理100%运行状态. 2.通过process explorer ...

  8. MySQL -- 内存使用监控详解

    问题: 1.我们怎么确定MySQL的各个部分分别使用了多少内存? 2.当有MySQL由于内存泄露引起OOM时.我们怎么提前发现? 怎么监控MySQL内存使用: 答案是通过performance_sch ...

  9. Linux 查看文件 cat与 more 用法

    1.cat 显示文件连接文件内容的工具: cat 是一个文本文件查看和连接工具.查看一个文件的内容,用cat比较简单,就是cat 后面直接接文件名. 比如: [root@localhost ~]# c ...

  10. js日期操作,某天的N天后,一个月后的日期

    var date = new Date(); var tomorrow = date.setDate(new Date().getDate() + 10); //10天后的日期 console.log ...