糟糕,接口被刷了,怎么办?
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
前言在面试时,经常会被问一个问题:如何防止别人恶意刷接口? 这是一个非常有意思的问题,防范措施挺多的。今天这篇文章专门跟大家一起聊聊,希望对你会有所帮助。 1 防火墙防火墙是网络安全中最基本的安全设备之一,主要用于防止未经授权的网络访问和攻击。 防火墙可以防止的攻击行为包括:
防火墙主要用于过滤和控制网络流量,以保护网络安全。 2 验证码对于一些非常重要的接口,在做接口设计的时候,要考虑恶意用户刷接口的情况。 最早的用户注册接口,是需要用图形验证码校验的,比如下面这样的: 其中账号名称作为用户的唯一标识。 但有些图形验证码比较简单,很容易被一些暴力破解工具破解。 由此,要给图形验证码增加难道,增加一些干扰项,增加暴力破解工具的难道。 但有个问题是:如果图形验证码太复杂了,会对正常用户使用造成一点的困扰,增加了用户注册的成本,让用户注册功能的效果会大打折扣。 因此,仅靠图形验证码,防止用户注册接口被刷,难道太大了。 后来,又出现了一种移动滑块形式的图形验证方式,安全性更高。 发手机短信的功能,一般是购买的云服务厂商的短信服务,按次收费,比如:发一条短信0.1元。 如果发送短信的接口,不做限制,被用户恶意调用,可能会产生非常昂贵的费用。 3 鉴权对于有些查看对外的API接口,需要用户登录之后,才能访问。 这种情况就需要校验登录了。 可以从当前用户上下文中获取用户信息,校验用户是否登录。 如果用户登录了,当前用户上下文中该用户的信息不为空。 否则,如果用户没登录,则当前用户上下文中该用户的信息为空。 对于有些重要的接口,比如订单审核接口,只有拥有订单审核权限的运营账号,才有权限访问该接口。 我们需要对该接口做功能权限控制。 可以自定义一个权限注解,在注解上可以添加权限点。 在网关层有个拦截器,会根据当前请求的用户的权限,去跟请求的接口的权限做匹配,只有匹配上次允许访问该接口。 4 IP白名单对于有些非常重要的基础性的接口,比如:会员系统的开通会员接口,业务系统可能会调用该接口开通会员。 会员系统为了安全性考虑,在设计开通会员接口的时候,可能会加一个ip白名单,对非法的服务器请求进行拦截。 这个ip白名单前期可以做成一个Apollo配置,可以动态生效。 如果后期ip数量多了的话,可以直接保存到数据库。 只有ip在白名单中的那些服务器,才允许调用开通会员接口。 这样即使开通会员接口地址和请求参数被泄露了,调用者的ip不在白名单上,请求开通会员接口会直接失败。 除非调用者登录到了某一个白名单ip的对应的服务器,这种情况极少,因为一般运维会设置对访问器访问的防火墙。 当然如果用了Fegin这种走内部域名的方式访问接口,可以不用设置ip白名单,内部域名只有在公司的内部服务器之间访问,外面的用户根本访问不了。 但对于一些第三方平台的接口,他们更多的是通过设置ip白名单的方式保证接口的安全性。 5 数据加密以前很多接口使用的是HTTP(HyperText Transport Protocol,即超文本传输协议)协议,它用于传输客户端和服务器端的数据。 虽说HTTP使用很简单也很方便,但却存在以下3个致命问题: 使用明文通讯,内容容易被窃听。 HTTPS协议是在HTTP协议的基础上,添加了加密机制: SSL:它是Secure Socket Layer的缩写, 表示安全套接层。 为了安全性考虑,我们的接口如果能使用HTTPS协议,尽量少使用HTTP协议。 如果你访问过一些大厂的网站,会发现他们提供的接口,都是使用的HTTPS协议。 6 限流之前提到的发送短信接口,只校验验证码还不够,还需要对用户请求做限流。 从页面上的验证码,只能限制当前页面的不能重复发短信,但如果用户刷新了页面,也可以重新发短信。 因此非常有必要在服务端,即:发送短信接口做限制。 我们可以增加一张短信发送表。 该表包含:id、短信类型、短信内容、手机号、发送时间等字段。 有用户发送短信请求过来时: 先查询该手机号最近一次发送短信的记录 但还是有漏洞。 比如:用户知道在60秒以内,是没法重复发短信的。他有个程序,刚好每隔60秒发一条短信。 这样1个手机号在一天内可以发:60*24 = 1440 条短信。 如果他有100个手机号,那么一天也可以刷你很多条短信。 由此,还需要限制每天同一个手机号可以发的短信次数。 其实可以用redis来做。 用户发短信之后,在redis中保存一条记录,key是手机号,value是发短信的次数,过期时间是24小时。 这样在发送短信之前,要先查询一下,当天发送短信的次数是否超过10次(假设同一个手机号一天最多允许发10条短信)。 如果超过10次,则直接提示用户操作太频繁,请稍后重试。 如果没超过10次,则发送短信,并且把redis中该手机号对应的value值加1。 短信发送接口完整的校验流程如下: 7 监控为了防止被别人恶意刷接口,对接口的调用情况进行监控,是非常有必要的。 我们的程序中可以将用户的请求记录,打印到相关日志中。 然后有专门的程序,统计用户接口的调用情况,如果发现有突增的流量,会自动发短信或者邮件提醒。 有了监控之后,我们可以及时发现异常的用户请求。 后面可以进行人工干预处理。 最近就业形式比较困难,为了感谢各位小伙伴对苏三一直以来的支持,我特地创建了一些工作内推群, 看看能不能帮助到大家。 你可以在群里发布招聘信息,也可以内推工作,也可以在群里投递简历找工作,也可以在群里交流面试或者工作的话题。 进群方式 添加苏三的私人微信:su_san_java,备注:博客园+所在城市,即可加入。 8 网关为了保证我们接口的安全性,可以提供统一的API网关,它可以实现过滤、鉴权、限流等功能。 用户请求我们的API接口时,需要先经过API网关,它转发请求到具体的API接口。 作者:苏三说技术,转自博客园https://www.cnblogs.com/12lisu/p/18017367 该文章在 2024/2/18 11:46:18 编辑过 |
关键字查询
相关文章
正在查询... |