企业商用网站建设企划书,wordpress 扁平化 主题,WordPress价格高低排序,企业网站关站在面试时#xff0c;经常会被问一个问题#xff1a;如何防止别人恶意刷接口#xff1f;
这是一个非常有意思的问题#xff0c;防范措施挺多的。今天这篇文章专门跟大家一起聊聊#xff0c;希望对你会有所帮助。 1 防火墙
防火墙是网络安全中最基本的安全设备之一#x… 在面试时经常会被问一个问题如何防止别人恶意刷接口
这是一个非常有意思的问题防范措施挺多的。今天这篇文章专门跟大家一起聊聊希望对你会有所帮助。 1 防火墙
防火墙是网络安全中最基本的安全设备之一主要用于防止未经授权的网络访问和攻击。
防火墙可以防止的攻击行为包括 无效数据包防火墙可以识别和过滤掉无效的数据包如错误的 IP 地址、伪造的数据包和无法识别的协议等。 DOS 和 DDOS 攻击防火墙可以使用不同的技术来检测和阻止 DOS 和 DDOS 攻击如阻止大量 TCP/UDP 连接、IP 地址过滤和流量限制等。 病毒和蠕虫攻击防火墙可以使用特定的病毒和蠕虫检测技术如签名检测、行为检测、模式识别等来防止这些恶意软件的传播。 网络钓鱼和欺骗攻击防火墙可以检测和防止网络钓鱼和欺骗攻击如防止虚假登录页面和欺骗的网站等。 恶意流量攻击防火墙可以检测和防止恶意流量攻击如过滤掉带有恶意载荷的数据包和防止被黑客利用的端口。 网络侦察攻击防火墙可以使用一些技术来防止网络侦察攻击如防止扫描、端口扫描和漏洞利用等。
防火墙主要用于过滤和控制网络流量以保护网络安全。
2 验证码
对于一些非常重要的接口在做接口设计的时候要考虑恶意用户刷接口的情况。
最早的用户注册接口是需要用图形验证码校验的比如下面这样的 用户只需要输入账号名称、密码和验证码即可完成注册。
其中账号名称作为用户的唯一标识。
但有些图形验证码比较简单很容易被一些暴力破解工具破解。
由此要给图形验证码增加难道增加一些干扰项增加暴力破解工具的难道。
但有个问题是如果图形验证码太复杂了会对正常用户使用造成一点的困扰增加了用户注册的成本让用户注册功能的效果会大打折扣。
因此仅靠图形验证码防止用户注册接口被刷难道太大了。
后来又出现了一种移动滑块形式的图形验证方式安全性更高。 此外使用验证码比较多的地方是发手机短信的功能。
发手机短信的功能一般是购买的云服务厂商的短信服务按次收费比如发一条短信0.1元。
如果发送短信的接口不做限制被用户恶意调用可能会产生非常昂贵的费用。
3 鉴权
对于有些查看对外的API接口需要用户登录之后才能访问。
这种情况就需要校验登录了。
可以从当前用户上下文中获取用户信息校验用户是否登录。
如果用户登录了当前用户上下文中该用户的信息不为空。
否则如果用户没登录则当前用户上下文中该用户的信息为空。
对于有些重要的接口比如订单审核接口只有拥有订单审核权限的运营账号才有权限访问该接口。
我们需要对该接口做功能权限控制。
可以自定义一个权限注解在注解上可以添加权限点。
在网关层有个拦截器会根据当前请求的用户的权限去跟请求的接口的权限做匹配只有匹配上次允许访问该接口。
4 IP白名单
对于有些非常重要的基础性的接口比如会员系统的开通会员接口业务系统可能会调用该接口开通会员。
会员系统为了安全性考虑在设计开通会员接口的时候可能会加一个ip白名单对非法的服务器请求进行拦截。
这个ip白名单前期可以做成一个Apollo配置可以动态生效。
如果后期ip数量多了的话可以直接保存到数据库。
只有ip在白名单中的那些服务器才允许调用开通会员接口。
这样即使开通会员接口地址和请求参数被泄露了调用者的ip不在白名单上请求开通会员接口会直接失败。
除非调用者登录到了某一个白名单ip的对应的服务器这种情况极少因为一般运维会设置对访问器访问的防火墙。
当然如果用了Fegin这种走内部域名的方式访问接口可以不用设置ip白名单内部域名只有在公司的内部服务器之间访问外面的用户根本访问不了。
但对于一些第三方平台的接口他们更多的是通过设置ip白名单的方式保证接口的安全性。
5 数据加密
以前很多接口使用的是HTTPHyperText Transport Protocol即超文本传输协议协议它用于传输客户端和服务器端的数据。
虽说HTTP使用很简单也很方便但却存在以下3个致命问题
使用明文通讯内容容易被窃听。不验证通讯方的真实身份容易遭到伪装。无法证明报文的完整性报文很容易被篡改。为了解决HTTP协议的这些问题出现了HTTPS协议。
HTTPS协议是在HTTP协议的基础上添加了加密机制
SSL它是Secure Socket Layer的缩写 表示安全套接层。TLS它是Transport Layer Security的缩写表示传输层安全。HTTPS HTTP 加密 认证 完整性保护。
为了安全性考虑我们的接口如果能使用HTTPS协议尽量少使用HTTP协议。
如果你访问过一些大厂的网站会发现他们提供的接口都是使用的HTTPS协议。
6 限流
之前提到的发送短信接口只校验验证码还不够还需要对用户请求做限流。
从页面上的验证码只能限制当前页面的不能重复发短信但如果用户刷新了页面也可以重新发短信。
因此非常有必要在服务端即发送短信接口做限制。
我们可以增加一张短信发送表。
该表包含id、短信类型、短信内容、手机号、发送时间等字段。
有用户发送短信请求过来时
先查询该手机号最近一次发送短信的记录 如果没有发送过则发送短信。如果该手机号已经发送过短信但发送时间跟当前时间比超过了60秒则重新发送一条新的短信。如果发送时间跟当前时间比没超过60秒则直接提示用户操作太频繁请稍后重试。这样就能非常有效的防止恶意用户刷短信的行为。
但还是有漏洞。
比如用户知道在60秒以内是没法重复发短信的。他有个程序刚好每隔60秒发一条短信。
这样1个手机号在一天内可以发60*24 1440 条短信。
如果他有100个手机号那么一天也可以刷你很多条短信。
由此还需要限制每天同一个手机号可以发的短信次数。
其实可以用redis来做。
用户发短信之后在redis中保存一条记录key是手机号value是发短信的次数过期时间是24小时。
这样在发送短信之前要先查询一下当天发送短信的次数是否超过10次假设同一个手机号一天最多允许发10条短信。
如果超过10次则直接提示用户操作太频繁请稍后重试。
如果没超过10次则发送短信并且把redis中该手机号对应的value值加1。
短信发送接口完整的校验流程如下
7 监控
为了防止被别人恶意刷接口对接口的调用情况进行监控是非常有必要的。
我们的程序中可以将用户的请求记录打印到相关日志中。
然后有专门的程序统计用户接口的调用情况如果发现有突增的流量会自动发短信或者邮件提醒。
有了监控之后我们可以及时发现异常的用户请求。
后面可以进行人工干预处理。
8 网关
为了保证我们接口的安全性可以提供统一的API网关它可以实现过滤、鉴权、限流等功能。
用户请求我们的API接口时需要先经过API网关它转发请求到具体的API接口。 有了API网关层可以保护API接口。