首页 > 其他分享 >匿名用户访问的接口或者无登录态场景下接口防刷的解决方案

匿名用户访问的接口或者无登录态场景下接口防刷的解决方案

时间:2023-12-28 23:34:51浏览次数:47  
标签:iptables sbin 防刷 -- tcp 匿名 接口 80 投票

背景

经常会遇到抽奖活动根据登记的手机号发短信验证抽奖,或者公开的投票系统,又或者面向马路上的消费者展开调查问卷。这些场景下都有可能会有不法分子借此谋利或者恶意破坏。

 

防刷不能靠一门单一的技术,而是要综合分析可能的破解手段,评估攻击者愿意做到什么地步,以和黑产打一场全面战争的角度思考问题。即:如何以最小的消耗,来最大限度的浪费黑产的时间和金钱。

 

而这种问题必然是没有银弹的。所有只提出一种单一手段的答案都该被踩——“技术解决一切”对于某些场合,是一种过于幼稚的幻想,得让现实需求好好削几个耳光治一治。

 

从这个意义上,单纯的提问这个问题,信息量太少了。具体策略必然需要根据具体的场景而定。例如:

 

  • 活动做多大规模?

  • 活动有多大利益?

  • 能否估计出可能的攻击者,会投入多大量级的资金?

  • 预计投入多少资金用于防刷技术?

  • 无论如何防刷,刷单损失客观上仍不可避免。那么最高可以容忍多少个百分点?

 

我们如何设计防刷系统,尽可能的规避此类问题的发生,本次就来探讨一下。

方案

刷接口行为一直以来都是个难题,无法从根本上防止。但是我们可以尽量减少刷接口带来的伤害,比如:通过人为增加的逻辑限制。

1、验证码:采用非常复杂的验证码

确切的说验证码的出现不是针对于人,而是针对于机器。通过复杂度和识别难易度的控制来阻拦掉一部分刷票机,从而减少刷票的发生。但随着软件技术、识别技术的发展越来越多的验证码面对着先进的刷票软件也失去了其防范的作用、但是专业刷票机可以攻破。如果不用验证码,投票基本就歇菜了,验证码获取方式,采用异步加载,即点击输入框时,才去请求,投票成功后,删除验证码的 Session。

2、限时投票

比如:从早8点至晚23 点

3、设置投票间隔

用户投票后,需要隔多长时间才能继续投。
很多投票站点基本上都有这个限制,但是对于更改 IP的攻击,就没办法了

4、投票结果展示:延迟展示,友好展示

页面上投票,JS 立马加1,但是刷新页面,不一定立马展示最新投票结果,返回状态给页面(感谢您的投票!或者 投票成功!至于有没有成功,另说了!)

5、扣量逻辑:常见于一些软件评选之类的投票

这是个杀手锏,后台跑脚本实时监控异常增长(刷票)的项,然后实施扣量逻辑
即对于这个项,投 10 票才算一票

6、Cookie:常用的手段。比较低级

投票后,在客户端写入 Cookie,下次投票时判断 Cookie 是否存在
但是,这种方式非常容易攻破,因为 Cookie 可删除

7、加密选项 ID:对一些投票选项的ID,进行随机加密

加密算法,加Salt,并且设置有效时间,比如5分钟内
服务器端进行解密并且验证

8、nginx限制链接数

ngx_http_limit_conn_module
ngx_http_limit_req_module
nginx_limit_speed_module

可以使用这三个模块来限制,不过这不是一个好的解决方法

9、iptables限制

/sbin/iptables -A INPUT -p tcp --dport 80 --syn -m recent --name webpool --rcheck --seconds 60 --hitcount 10 -j DROP
/sbin/iptables -A INPUT -p tcp --dport 80 --syn -m recent --name webpool --set -j ACCEPT
/sbin/iptables -t filter -A INPUT -p tcp --dport 80 --tcp-flags FIN,SYN,RST,ACK SYN -m connlimit --connlimit-above 10 --connlimit-mask
 32 -j REJECT
具体脚本
#!/bin/bash
# Date: 2015-09-29
# # Author: [email protected]
 
shopt -s -o nounset
export PATH=/usr/bin/:/bin
 
iptables_log="/tmp/iptables_conf.log"
 
/sbin/iptables -A INPUT -p tcp --dport 80 --syn -m recent --name webpool --rcheck --seconds 60 --hitcount 10 -j DROP
/sbin/iptables -A INPUT -p tcp --dport 80 --syn -m recent --name webpool --set -j ACCEPT
/sbin/iptables -t filter -A INPUT -p tcp --dport 80 --tcp-flags FIN,SYN,RST,ACK SYN -m connlimit --connlimit-above 10 --connlimit-mask 32 -j REJECT
 
while [ true ]; do
 
    #sleep 1
    for IP in `netstat -an | grep -i ':80 '|grep 'ESTAB' | awk '{print $5}' | cut -d : -f 1 | sort | uniq -c | awk '{if($1 > 30 && $2!="127.0.0.1" ) {print $2}}'`
    do
        /sbin/iptables -L -n  | grep  $IP >/dev/null || /sbin/iptables -A INPUT -p tcp --dport 80 -s $IP -j DROP
        echo "/sbin/iptables -A INPUT -p tcp  -s $IP -j DROP" >> ${iptables_log}
    done
done

 

本篇文章如有帮助到您,请给「翎野君」点个赞,感谢您的支持。

首发链接:https://www.cnblogs.com/lingyejun/p/17933816.html

标签:iptables,sbin,防刷,--,tcp,匿名,接口,80,投票
From: https://www.cnblogs.com/lingyejun/p/17933816.html

相关文章

  • 接口自动化框架选型
    你好,我是刚哥。背景:公司计划开展接口自动化测试,接口工具Postman、JMeter等不好管理用例,资源有限也一时半会搭不了测试平台,先用测试框架把自动化测试搞起来。选择技术栈。Python、Java、Go三选一。能选Python就选Python。只会Java或只会Go才选JavaGo。Python语法简单,上手容易,有......
  • 【接口自动化测试入门】从0到1落地接口自动化测试
    前段时间写了一系列自动化测试相关的文章,当然更多的是方法和解决问题的思路角度去阐述我的一些观点。这篇文章来聊聊新手如何从零到一落地实践接口自动化测试。为什么要做接口测试测试理念的演变早些时候,软件研发交付流程大多遵循V型或W型的瀑布模式,这种模式下只有开发编码完成......
  • 接口自动化测试第三天,利用类的动态方法设置全局变量
    今天的注意知识点是学会使用jsonpath,利用类的动态方法设置全局变量我们大多数情况下,接口都需要使用到登录时获取的token,为了方便使用,我们需要将登录后的token使用jsonpath表达式提取出来然后设置为全局变量首先提前下载好第三方库,jsonpath,这里给一个jsonpath官方地址和在线练习......
  • 码上放心-码上传接口开通指南
    码上放心-码上传接口开通指南(相关技术问题可进群咨询,钉钉群号:67685003096)返回文档平台技术对接支持阿里钉钉群:群号:67685003096一、什么是码上传服务?向有开发需求的经营(批发/物流)企业提供码上传接口开发包,企业通过码上接口实现码上放心平台与企业ERP、WMS等信息系统数据对接......
  • swagger接口未授权怎么玩?
    今天来分享下我是如何自动提取swagger中配置的API接口的,在此之前,先来了解下swagger是什么?下面是chatgpt的回答:总结起来就是一套方便开发人员设计、构建API的框架,国内外应用非常广泛,大家在日常信息收集的时候经常会遇到这样的系统,比如通过谷歌语法可以轻松找到:还可以......
  • c#语法JWT请求接口
    NuGet下载System.IdentityModel.Tokens.Jwt包下面是获取token,需要引用对应的jwtusingSystem.IdentityModel.Tokens.Jwt;usingMicrosoft.IdentityModel.Tokens;privatevoidbutton1_Click(objectsender,EventArgse){stringsecretId="a1bc3900b......
  • Handler接口
    typeHandlerinterface{ServeHTTP(ResponseWriter,*Request)}处理http请求的接口---相当于Java的Controller方法配合http包下的方法使用funcListenAndServe(addrstring,handlerHandler)error{server:=&Server{Addr:addr,Handler:handler}retu......
  • Jmeter —— 接口之间关联调用(获取上一个接口的返回值作为下一个接口的请求参数)
    正则表达式:具体如何操作:1.草稿保存,此请求的响应数据的id为发布总结的请求参数draft_id2.草稿保存的响应数据3.在草稿保存的请求中,添加后置处理器-正则表达式提取器,提取响应数据的id信息4.发布总结请求中,填写请求参数5.最终,可正常发布最后如果你想学习软件测......
  • 05 读写I2C接口EEPROM实验
    软件版本:VIVADO2021.1操作系统:WIN1064bit硬件平台:适用XILINXA7/K7/Z7/ZU/KU系列FPGA登录米联客(MiLianKe)FPGA社区-www.uisrc.com观看免费视频课程、在线答疑解惑!1概述我们知道I2C总线具备广泛的用途,比如寄存器的配置,EEPROM的使用,更重要的是I2C总线上可以挂载非常多的外......
  • 06 读写I2C接口的RTC时钟芯片
    软件版本:VIVADO2021.1操作系统:WIN1064bit硬件平台:适用XILINXA7/K7/Z7/ZU/KU系列FPGA登录米联客(MiLianKe)FPGA社区-www.uisrc.com观看免费视频课程、在线答疑解惑!1概述本节课继续利用I2C总线控制器实现对RTC时钟芯片,DS1337的读写访问,进一步验证我们设计的i2c控制器的可靠......