网站访问限制

最近网站一直受到恶意请求和攻击,把最近限制防护历程记录一下:

1、请求次数超过阈值做限制

刚开始网站并没有受到攻击,但有一些恶意抓取网站数据的爬虫,为了防止别人抓取本网站数据,做了请求次数限制,具体思路就是,单位时间内,请求次数超过设定的阈值,自动转向验证码页面,验证通过后可以继续访问,这样既不影响正常访问者,也可阻挡机器请求。

技术实现方式:刚开始的想法时,每次访问请求时,使用数据集记录IP的请求数量和时间,这样做比较麻烦,不但需要定时清空过时的数据,还要对比时间。然后改用缓存模式,缓存本身有过期时间设定,这样就避免了定时清数据的操作,并且速度快,然后使用IP作为key,访问次数作为value。每次访问请求时,根据IP获得缓存数据,如果获不到数据,创建该缓存,同时设定缓存有效期(阈值有效期),如果获得数据,累加访问次数,如果累计的次数超过阈值,转到验证页面,验证成功,阈值清零,可继续访问。

这样的方式,避免了频率比较高请求,但如果别人用比较低的频率抓取数据,也无法防护。另外由于设置的单位时间内阈值比较高,没有考虑搜索引擎爬虫,后来的经验表明,各种各样的引擎爬虫,爬取的速度频率还是比较高的。

2、网站受到恶意攻击

有一天网站突然访问速度很慢,甚至无法访问,然后登录服务器查看服务器状况,发现CPU使用率100%,首先想到的是,可能是代码出现了死循环或者代码质量问题,但最近发布的版本一直很稳定,排除了该可能性。查看系统日志,发现服务器出现大量的数据请求,并且请求的是商品查询页面,整个系统几乎最耗性能的一个操作。还好之前做了数据分离,不直接操作数据库,保证了数据库服务器正常运行。但一个台web服务器还是无法应付几百个IP同时的大量请求(CC攻击),再加上网站有几万的商品,全部请求商品查询页面,网站几乎一下子就瘫痪了。首先想到的是,利用IIS限制IP访问,阿里云服务器竟然没找到该功能,不得已只有利用应用限制,赶紧在程序访问的BeginRequest中做了限制,把这些访问比较多的IP放到黑名单中,总算暂时给限制住了。

然后联系阿里云客服,看看有没有什么方法做限制,他们推荐了web应用防火墙,每天拦截了上万的Web攻击和CC攻击,总算安稳了一段时间。注意:使用Web应用防火墙之后,系统日志获得不了真正的客户IP,需要在IIS里安装F5XForwardedFor.zip

3、网站再次受到攻击

好景不长,网站再次受到攻击,包括恶意的数据抓取,这次IP段更广,并且不在之前的限制名单中,一些IP请求的总次数很少,Web应用防火墙也不再起太多的作用(估计单位阈值达不到触发条件,具体不太清楚触发机制)。我这边分两步走,一是把网站访问限制阈值调的更低,二是限制三位IP,发现大量的IP,前三个都是相同的,唯一不同的是后一位。想到有些限制IP可能是代理,不一定是真正攻击者,不得已,攻击过后,放开限制IP。每次攻击时,重新计算攻击IP,进行限制。

4、搜索引擎也被限制

有一天突然发现百度自然搜索中,网站的关键词快照,全部变成了限制请求了(被限制的IP访问,会返回“限制访问”几个字),在历次的攻击中,虽然想到了可能会限制到搜索引擎的爬虫,但想到爬虫不会请求那么频繁,并且限制后就立即放开了,应该影响不了,虽然可以根据UserAgent判断是否为爬虫,但恶意的也可以伪装成搜索引擎爬虫,就想当然的没处理。直接的后果就是导致了订单量直线下降。最后查询快照那天的百度爬虫访问日志,正好当时也被攻击,百度当天的访问量将近3000次,远远超过了阈值,被限制了。

了解到各个搜索引擎都有自己的特征,比如百度、谷歌,可以利用IP反查是否属于百度、谷歌,360引擎直接给出了爬虫IP,根据各个搜索引擎特征,在限制时做了改动,增加黑名单、白名单、高频率请求三种组合方式。查询出访问比较高的IP,如果是搜索爬虫特征的,手工验证该IP是否真正属于搜索引擎(利用 nslookup 命令),如果不属于,进入黑名单,否则进入白名单。像360这样的,直接给出IP的,直接放到白名单。

后记:目前仍在观察中,如果谁有更好的访问限制方法,不吝赐教。

时间: 2024-11-03 03:25:18

网站访问限制的相关文章

一个简单的网站访问过程

对于我们一个简单的网站访问,涉及到的技术: 1.用户访问浏览器时,浏览器会向服务器发出一个 HTTP 请求: 2.服务器接收到 HTTP 请求,Web Server 进行相应的初步处理,使用服务器脚本生成页面: 3.服务器脚本(利用Web Framework)调用本地和客户端传来的数据,生成页面: 4.Web Server 将生成的页面作为 HTTP 响应的 body,根据不同的处理结果生成 HTTP header,发回给客户端: 5.客户端(浏览器)接收到 HTTP 响应,通常第一个请求得到的

开源网站访问统计系统Piwik

http://www.piwik.cn/ http://www.piwik.org/ Piwik 是一套基于 Php+MySQL 技术构建,能够与 Google Analytics 相媲美的开源网站访问统计系统.Piwik 可以给你详细的统计信息,比如网页浏览人数, 访问最多的页面, 搜索引擎关键词等等,并且采用了大量的AJAX/Flash技术,使得在操作上更加便易. Piwik 可以安装在你的服务器上面,数据就保存在你自己的服务器上 面.你可以非常容易的插入统计图表到你的博客或是网站后台的控制

加速网站访问的一些实践体会

自己运营过几个小站,没有任何盈利,为了节省成本,选择的配置比较低,带宽就1M. 前段时间,在个人官网首页搞了几张轮播图,图片还比较大,展示变得更慢了. 因此呢,想总结下关于加速网站访问的一些体会. 1.文件压缩  JS和CSS等静态资源进行压缩,网上有很多压缩工具,建议把压缩做成"可编程"的.  也可以开启gzip压缩,目前还没有尝试过. 大图片,也有必要压缩,现在的手机像素都很高,一张照片就有3MB以上,挺吓人的.  用Freemarker等图片处理工具,压缩下,很有必要.一定程度上

如何有效减少网页加载时间?20个提高网站访问速度的方法

网友上网都不喜欢用太多的时间等待网页的打开,等待的越长,用户可能会直接关闭网页,这样就会损失很多流量!其次,关键字的排名与网页的打开速度也有关系,这个主要体现搜索引擎对用户体验度上,用户体验度好,排名相对其它网站就好些.因此我觉得我们有必要去提高网页的打开速度,这个不需要太多的成本投入,只需要平时多注意一些小技巧就行了!下面给出20种方法帮你提高网站访问速度缩短网页加载时间. 1.减少页面HTTP请求数量 比较直接的理解就是要减少调用其他页面.文件的数量. A.我们在使用css格式控制的时候,经

Apache服务器网站访问伪静态内页出现No input file specified.的完美解决方案

原文地址:Apache服务器网站访问伪静态内页出现No input file specified.的完美解决方案 启用REWRITE的伪静态功能的时候,首页可以访问,而访问内页的时候,就提示:"No input file specified." 原因在于使用的PHP是fast_cgi模式,而在某些情况下,不能正确识别path_info所造成的错误,Wordpress的伪静态也有一样的问题. Wordpress程序默认的.htaccess里面的规则: 1 HTML " data

网站访问慢-MySQL负载高(实战)

   今日发现网站访问慢,一次进行了排查,开始思路混乱,下面来梳理下 一.故障分析 首先,判断访问慢现象,是个人还是集体??? 个人现象排查:检查个人网络,pc,浏览器.中毒等,无需多说自己百度: 集体现象排查:检查核心路由交换,ISP运行商网络,ARP攻击,DNS服务,各服务器状态: 服务状态排查:zabbix监控:创建测试页面测试: 静态页面=>动态页面=>动态交互页面 通过上述排查,当测试php与mysql动态交互页面很慢,所以确定为mysql服务器异常,立刻登录mysql,通过top命

2-12-配置squid代理服务器加快网站访问速度

本节所讲内容: squid服务器常见概念 squid服务器安装及相关配置文件 实战:配置squid正向代理服务器 实战:配置透明squid代理提升访问速度 实战:配置squid反向代理加速度内网web服务器访问速度 squid服务概述: 全称: squid cache,是一个流行的自由软件(GNU通用公共许可证). 主要有连个功能:  代理服务器 和 为web服务器提供缓存 应用广泛: 1. 共享网络资源,缓存万维网; 2.为web服务器前置缓存提高web服务器的访问速度; 3. 域名和其他网络

解决openstack 的 dashboard 使用了google 字体, 导致网站访问速度慢

openstack 的 dashboard 使用了google 字体, 导致网站访问速度慢 解决方案有几种: 去掉google字体,直接删除google字体 使用local字体替代 使用360字体替代 字体使用代码在css中,以ubuntu为例: /usr/share/openstack-dashboard/static/dashboard/css/7ac7b118466e.css @font-face {   font-family: 'Ubuntu';   font-style: norma

测试网站访问速度的5个方法(转)

网页载入速度对于一个网站来讲很关键,Google已经将一个网站的载入速度列入了网站关键字排名的考虑因素当中,也就是说如果你的网站有足够的内容,而且载入速度比别人的网站更快一步的话,那么你就是获得更好的排名.那么下面就赶快测试你的网站,提高网站访问速度吧. 1:用Ping命令简单测网站速度的方法 Ping可以用来检查网络是否通畅或者网络连接速度,点击开始→运行 在运行中输入“cmd”回车或点击确定,输入ping www.你的网址.com 就可以了. (新手只需注意本图红框里的含义即可) Ping结

【转】加快网站访问速度——Yslow极限优化

Yslow是一套雅虎的网页评分系统,详细的列出了各项影响网页载入速度的参数,这里不做多说. 我之前就一直参考Yslow做博客优化,经过长时间的学习也算是有所收获,小博的YslowV2分数达到了94分(偶耶!),如果换用博客类小网站评分标准更是可以达到满分. 下面我就总结几点大家力所能及优化方法,分享给各位. 下面贴一下小博全新刷新的载入图,下面文章中用得到: 我认为网页优化主要分为两类,个人称之为软优化与硬优化.软优化主要包括:服务器缓存类与浏览器本地缓存类,这些优化主要是参数设置上的改动.而硬