背景如下:有一个电子商务网站,不需要登录就可以查询网站上的产品,现在有大量的来自全球的代理请求过来,导致网站处理不过来这么多请求,没有空闲的资源处理正常用户访问。
我的问题是:能不能有一个请求唯一标识,每一次请求都自动添加到请求header中,并且这个唯一标识是不能破解或者很难破解的。
以前用过HttpWebRequest来模拟请求网站,这个实际上就可以做到大量的代理并发访问网站,导致网站崩溃。
我看去哪儿和淘宝貌似都有这个请求唯一标识,无奈看不懂他们的规则,能不能有哪位指教下?
豆豆不多,仅剩9颗,还不能选9,只能选0和5.。。。
请求唯一标识跟你的流量限制有什么关系?
你要做的是用户查询频率限制,一般根据IP限制访问频率就可以了.你可以实现一个访问限制全局过滤器,
统计IP访问频率,超过限制时,直接结束请求,
比起这个你更应该做的是查询效率优化.你只要保证正常请求能被正常响应就可以了.
不是的,他是正常访问,目前发现的代理IP地址就有好几千个,同时每个人来请求一次。所以查询频率限制是没法做的,他一个IP,是正常频率之内。。。
主要是想做一个唯一标识,只要这个标识不是预期值,我直接返回一个小的静态html拒绝访问,并记录下来,再找解决方案。
@dongger: 那不就得了.你自己都说他是正常访问了.如果你把正常访问限制了.不是正常用户也没法用了.
攻击者的目的还不是达到了.你这个标识怎么区分啊.不管你走什么逻辑,都照着走不就得了.
@吴瑞祥: 我想做的是,有一个唯一标识规则,这个规则必须通过一定的规则进行计算,每次请求前客户端都通过一些手段来生成这个唯一标识,服务器接收到请求时,先验证这个标识,如果不合法,就表示是用的机器自动请求(一般爬虫是不会有js引擎的)。正常用户的话,他一定是通过浏览器过来的,这种肯定是能够计算成功的。这样能将大部分机器请求杜绝在底层查询数据库等等大量计算之前。
@dongger: 前面已经说了.你还是把系统优化下比较重要.你这样并不能防止他正常访问
@吴瑞祥: 嗯,我再研究下,谢谢。
1秒钟有多少请求?
最高峰期时,一秒钟7千多个请求,这个站点目前只有一台服务器,由于一些原因,暂时无法添加服务器。。
@dongger: 这相当于是攻击了。如果在云上,可以用云服务商的防攻击服务解决。自己托管的服务器,只能自己想办法防攻击了。
@dudu: dudu大神研究过去哪儿或者淘宝的防爬虫功能不?他们就是做了个庞大的js文件来计算请求标识,如果写爬虫的人去爬他的系统,这个请求标识就是一大难关(就我了解,目前还没人破过,而且这个js文件可以随时变);他把大量的请求全部杜绝了,反是这种,都显示验证码。。。
@dongger: 你把页面中的主要内容都都做成ajax加载,估计就能干掉不少爬虫
@dudu: 这个工作量好大。我再研究下行业先驱的解决方案。谢谢dudu,每次我发博问,你都是第一个回答的,太敬业了。。
@dudu: 为啥做成ajax就能干掉不少爬虫?
@ExploreForward: 爬ajax技术上要求高一些。
把机器摧毁了。
在应用层过滤,没什么太好的办法。首次请求(首次请求没有js执行的机会),数据又不是ajax的(如果是ajax,可以在后续ajax请求增加标识符),那么防不胜防啊。
可以针对性的封一个地区的ip。
对于机器请求最好的办法是什么?几乎普遍的都是用验证码,验证操作本来就是防止机器人的。