Java实现防刷点击量

Java实现防刷点击量目前很多主流媒体网站,如bilibili等,都会有访问量指标,而点击量代表了一个视频的热度,我们知道,每当打开一个视频的时候,它对应的访问量就会+1,这时候肯定会有人想到,那我写一个脚本,每秒发一次请

目前很多主流媒体网站,如bilibili等,都会有访问量指标,而点击量代表了一个视频的热度,我们知道,每当打开一个视频的时候,它对应的访问量就会+1,这时候肯定会有人想到,那我写一个脚本,每秒发一次请求打开这个视频页面,那一天不就轻轻松松能刷个几万访问量了?

为了防止访问量被一些”不法之徒”玩坏,大多网站都会对访问量进行限制,目前比较主流的做法是IP限制,简单做法是在redis中设置一份hash缓存,以用户id+视频id为key,value随意设置都行,过期时间设为n秒,每当一个用户点击一个视频时,就生成对应的key放到redis中,并且该视频访问量+1,然后过了n秒,用户再次点击这个视频时,系统发现该key在redis中还没过期(这个过期时间根据具体业务来定,可以是300秒,也可以是一天),则不增加该视频的访问量。

这时可能又有人想到,你按用户来限制啊,那我注册n多个账户,然后每次换一个用户来点击,一样能刷访问量。视频公司一看,好小子,你还能来这一招,但是我不怕,我直接按照ip来限制,管你多少个用户访问,我都算1个。

于是我们可以优化一下策略,以用户ip+视频id为key,这样可以进一步有效防止刷点击量。在Java中使用httpServletRequest.getRemoteAddr()方法来获取客户端ip,但是如果用户使用了反向代理软件,那这个ip就不是用户的真实ip,而是反向代理软件的ip,但是在转发请求的HTTP头信息中,增加了X-FORWARDED-FOR信息用以跟踪原有的客户端IP地址和原来客户端请求的服务器地址,所以我们可以使用httpServletRequest.getHeader(“x-forwarded-for”)这个方法来获取用户的真实ip,这样就能根据ip来对访问量进行限制。

但是这样就真的万无一失了吗?要知道请求头里的ip地址是可以伪造的,在使用httpClient发送请求时,调用httpPost.addHeader(“x-forwarded-for”,ip)就能轻松伪造ip,因此目前流行的刷访问量的手段就是通过伪造ip来实现,在Java中可能还比较少,但是python的刷点击脚本在网上可是一搜一大把,只要有1个容量足够大的ip池,每次发请求都用不同的ip,视频公司还是很难限制的。

今天的文章Java实现防刷点击量分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/18884.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注