首页 新闻 会员 周边 捐助

如何有效防止机器模拟大量请求,导致网站堵塞?

0
悬赏园豆:5 [已解决问题] 解决于 2015-07-23 14:34

背景如下:有一个电子商务网站,不需要登录就可以查询网站上的产品,现在有大量的来自全球的代理请求过来,导致网站处理不过来这么多请求,没有空闲的资源处理正常用户访问。

我的问题是:能不能有一个请求唯一标识,每一次请求都自动添加到请求header中,并且这个唯一标识是不能破解或者很难破解的。

以前用过HttpWebRequest来模拟请求网站,这个实际上就可以做到大量的代理并发访问网站,导致网站崩溃。

我看去哪儿和淘宝貌似都有这个请求唯一标识,无奈看不懂他们的规则,能不能有哪位指教下?

豆豆不多,仅剩9颗,还不能选9,只能选0和5.。。。

dongger的主页 dongger | 菜鸟二级 | 园豆:209
提问于:2015-06-30 10:30
< >
分享
最佳答案
0

请求唯一标识跟你的流量限制有什么关系?

你要做的是用户查询频率限制,一般根据IP限制访问频率就可以了.你可以实现一个访问限制全局过滤器,

统计IP访问频率,超过限制时,直接结束请求,

比起这个你更应该做的是查询效率优化.你只要保证正常请求能被正常响应就可以了.

收获园豆:5
吴瑞祥 | 高人七级 |园豆:29449 | 2015-06-30 10:39

不是的,他是正常访问,目前发现的代理IP地址就有好几千个,同时每个人来请求一次。所以查询频率限制是没法做的,他一个IP,是正常频率之内。。。

主要是想做一个唯一标识,只要这个标识不是预期值,我直接返回一个小的静态html拒绝访问,并记录下来,再找解决方案。

dongger | 园豆:209 (菜鸟二级) | 2015-06-30 10:41

@dongger: 那不就得了.你自己都说他是正常访问了.如果你把正常访问限制了.不是正常用户也没法用了.

攻击者的目的还不是达到了.你这个标识怎么区分啊.不管你走什么逻辑,都照着走不就得了.

吴瑞祥 | 园豆:29449 (高人七级) | 2015-06-30 10:43

@吴瑞祥: 我想做的是,有一个唯一标识规则,这个规则必须通过一定的规则进行计算,每次请求前客户端都通过一些手段来生成这个唯一标识,服务器接收到请求时,先验证这个标识,如果不合法,就表示是用的机器自动请求(一般爬虫是不会有js引擎的)。正常用户的话,他一定是通过浏览器过来的,这种肯定是能够计算成功的。这样能将大部分机器请求杜绝在底层查询数据库等等大量计算之前。

dongger | 园豆:209 (菜鸟二级) | 2015-06-30 10:47

@dongger: 前面已经说了.你还是把系统优化下比较重要.你这样并不能防止他正常访问

吴瑞祥 | 园豆:29449 (高人七级) | 2015-06-30 10:53

@吴瑞祥: 嗯,我再研究下,谢谢。

dongger | 园豆:209 (菜鸟二级) | 2015-06-30 10:57
其他回答(4)
0

1秒钟有多少请求?

dudu | 园豆:30778 (高人七级) | 2015-06-30 10:34

最高峰期时,一秒钟7千多个请求,这个站点目前只有一台服务器,由于一些原因,暂时无法添加服务器。。

支持(0) 反对(0) dongger | 园豆:209 (菜鸟二级) | 2015-06-30 10:35

@dongger: 这相当于是攻击了。如果在云上,可以用云服务商的防攻击服务解决。自己托管的服务器,只能自己想办法防攻击了。

支持(0) 反对(0) dudu | 园豆:30778 (高人七级) | 2015-06-30 10:52

@dudu: dudu大神研究过去哪儿或者淘宝的防爬虫功能不?他们就是做了个庞大的js文件来计算请求标识,如果写爬虫的人去爬他的系统,这个请求标识就是一大难关(就我了解,目前还没人破过,而且这个js文件可以随时变);他把大量的请求全部杜绝了,反是这种,都显示验证码。。。

支持(0) 反对(0) dongger | 园豆:209 (菜鸟二级) | 2015-06-30 10:56

@dongger: 你把页面中的主要内容都都做成ajax加载,估计就能干掉不少爬虫

支持(0) 反对(0) dudu | 园豆:30778 (高人七级) | 2015-06-30 11:00

@dudu: 这个工作量好大。我再研究下行业先驱的解决方案。谢谢dudu,每次我发博问,你都是第一个回答的,太敬业了。。

支持(0) 反对(0) dongger | 园豆:209 (菜鸟二级) | 2015-06-30 11:04

@dudu: 为啥做成ajax就能干掉不少爬虫?

支持(0) 反对(0) ExploreForward | 园豆:18 (初学一级) | 2015-06-30 19:05

@ExploreForward: 爬ajax技术上要求高一些。

支持(0) 反对(0) dudu | 园豆:30778 (高人七级) | 2015-06-30 20:19
0

把机器摧毁了。

Launcher | 园豆:45050 (高人七级) | 2015-06-30 10:47
0

在应用层过滤,没什么太好的办法。首次请求(首次请求没有js执行的机会),数据又不是ajax的(如果是ajax,可以在后续ajax请求增加标识符),那么防不胜防啊。

可以针对性的封一个地区的ip。

幻天芒 | 园豆:37207 (高人七级) | 2015-06-30 13:33
0

对于机器请求最好的办法是什么?几乎普遍的都是用验证码,验证操作本来就是防止机器人的。

博客园团队 | 园豆:5379 (大侠五级) | 2018-08-15 18:19
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册