糟糕,接口被刷了,怎么办?

news2025/1/19 23:09:35

前言

在面试时,经常会被问一个问题:如何防止别人恶意刷接口?

这是一个非常有意思的问题,防范措施挺多的。今天这篇文章专门跟大家一起聊聊,希望对你会有所帮助。

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 数据加密

以前很多接口使用的是HTTP(HyperText 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 监控

为了防止被别人恶意刷接口,对接口的调用情况进行监控,是非常有必要的。

我们的程序中可以将用户的请求记录,打印到相关日志中。

然后有专门的程序,统计用户接口的调用情况,如果发现有突增的流量,会自动发短信或者邮件提醒。

有了监控之后,我们可以及时发现异常的用户请求。

后面可以进行人工干预处理。

最近就业形式比较困难,为了感谢各位小伙伴对苏三一直以来的支持,我特地创建了一些工作内推群, 看看能不能帮助到大家。

你可以在群里发布招聘信息,也可以内推工作,也可以在群里投递简历找工作,也可以在群里交流面试或者工作的话题。

进群方式

添加苏三的私人微信:su_san_java,备注:博客园+所在城市,即可加入。

8 网关

为了保证我们接口的安全性,可以提供统一的API网关,它可以实现过滤、鉴权、限流等功能。

用户请求我们的API接口时,需要先经过API网关,它转发请求到具体的API接口。

有了API网关层,可以保护API接口。

文章转载自:苏三说技术

原文链接:https://www.cnblogs.com/12lisu/p/18017367

体验地址:引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1455317.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

每周AI新闻(2024年第7周)OpenAI发布视频生成模型Sora | 谷歌推出Gemini 1.5 | 英伟达公开超级计算机

这里是陌小北,一个正在研究硅基生命的碳基生命。正在努力成为写代码的里面背诗最多的,背诗的里面最会写段子的,写段子的里面代码写得最好的…厨子。 每周日解读每周AI大事件。 这一周,国外各厂真是不让我们消停儿过年呐&#xf…

抑郁症测试丨焦虑症测试小程序源码

这是一个考验智力,心里上面的一个测试游戏 支持多种测试方法比如有: 智商测试丨情商测试 性格测试丨爱情测试 抑郁症测试丨焦虑症测试 心理压力测试丨生活满意度测试 通过不同的测试,来检查你的智力,情商等等 通过发行自己的不住来弥补自己的不足所以这就是为什么小编会…

Linux系统——防火墙Firewalld

目录 一、firewalld介绍 1.归入zone顺序 2.firewalld zone分类 3.预定义服务 二、图形化操作 1.打开firewalld图形化界面 2.以http服务为例,打开httpd服务 3.修改端口号 三、命令行配置 1.基础配置 2.查看现有firewalld设置 3.设置查看默认区 4.添加源…

Java集合篇之深度解析Queue,单端队列、双端队列、优先级队列、阻塞队列

写在开头 队列是Java中的一个集合接口,之前的文章已经讲解了List和Set,那么今天就来唠一唠它吧。队列的特点:存储的元素是有序的、可重复的。 队列的两大接口Queue vs Deque Queue 是单端队列,只能从一端插入元素,另…

【c++】STL之stack和queue详解

> 作者简介:დ旧言~,目前大二,现在学习Java,c,c,Python等 > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:掌握stack和queue库,了解deque库 >…

linux系统,使用cmake 编译C++代码,如何生成静态库。

linux系统,使用cmake 编译C代码,如何生成静态库。 xlog文件夹下面是生成静态库所需要的文件。 test_xlog文件夹下面是调用静态库所需要的文件。 xlog文件夹下的文件: 1、CMakeLists.txt #CMakeLists.txt # 设置:版本 cmake_minimum_req…

[playbook] playbook运用

一、复习playbook剧本 --- - name: first play for install nginx #设置play的名称gather_facts: false #设置不收集facts信息hosts: webservers:dbservers #指定执行此play的远程主机组remote_user: root #指定执行此play的用…

自建AWS S3存储服务

unsetunset前言unsetunset AWS S3(Amazon S3,全名为亚马逊简易存储服务),是亚马逊公司利用其亚马逊网络服务系统所提供的网络在线存储服务。我常用的很多SaaS服务中提供的文件存储功能,底层也都是AWS S3,比…

Vite 构建流程大揭秘:快速构建前端项目的秘密武器

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

LabVIEW荧光显微镜下微管运动仿真系统开发

LabVIEW荧光显微镜下微管运动仿真系统开发 在生物医学研究中,对微管运动的观察和分析至关重要。介绍了一个基于LabVIEW的仿真系统,模拟荧光显微镜下微管的运动过程。该系统提供了一个高效、可靠的工具,用于研究微管与运动蛋白(如…

JDBC核心技术

第1章 JDBC概述 第2章 获取数据库连接 第3章 使用PreparedStatement实现CRUD操作 第4章 操作BLOB类型字段 第5章 批量插入 第6章 数据库事务 第7章 DAO及相关实现类 第8章 数据库连接池 第9章 Apache-DBUtils实现CRUD操作图像 小部件

若依项目改造

ctrlalt l 格式化项目 alt f6 修改包和import包名 替换com.ruoyi 为 com.cj 替换若依版本为自己的版本 将ruoyi改成自己项目的英文名 修改中文名字 修改文件包名 修改有ruoyi的类名 : 验证码生成器包名修改:

ansible自动化运维工具及常见模块的使用

目录 一、ansible概述 二、ansible的特性 三、ansible 环境安装部署 管理端安装 ansible: 配置主机清单: 配置密钥对验证: 四、ansible 常见模块的使用 1.command 模块 2.shell 模块 3.cron 模块…

GEO文章套路,数据下载和批次效应处理

原文链接: SCI文章复现 | GEO文章套路,数据下载和批次效应处理https://mp.weixin.qq.com/s/KBA67EJ7cCK5NDTUzrwJ2Q 一、前言 这是2024年春节后的第一个推送教程,我们也给大家赠送一个福利。将前期的付费教程免费推送给大家。其实&#xff…

物奇平台ENC算法开关接口修改方法

物奇ENC算法开关接口修改 是否需要申请加入数字音频系统研究开发交流答疑群(课题组)?可加我微信hezkz17, 本群提供音频技术答疑服务,+群赠送语音信号处理降噪算法,蓝牙耳机音频,DSP音频项目核心开发资料, 1 配置工具 2 代码接口

第13章 基于Java Swing的图书管理系统

13.1 需求分析 在当今社会,随着信息技术的不断发展,信息管理系统已经进入到了人类社会的各个领域,人们对于信息技术的掌握也越来越迅速。在图书管理的过程中也引入图书管理体系,图书管理系统将大大节省人力、物力、时间、金钱等资…

Linux:开源世界的王者

在科技世界中,Linux犹如一位低调的王者,统治着开源世界的半壁江山。对于许多技术爱好者、系统管理员和开发者来说,Linux不仅仅是一个操作系统,更是一种信仰、一种哲学。 一、开源的魅力 Linux的最大魅力在于其开源性质。与封闭的…

利用Python进行数据分析(附详细案例)

一、前期准备 分析要用到两个包:NumPy和Pandas,首先确保jupyter中成功安装了这两个包。 #导入numpy包 import numpy as np #导入pandas包 import pandas as pd二、基础知识 2.1 一维数据分析:NumPy 2.2 一维数据结构:Pandas …

实习日志14

完善条件查询和word生成列表 条件查询 word生成列表 1.阶段性总结 1.1.入职培训 首先,蔡老师的活字格软件开发入门和应用培训为我提供了深入了解软件开发的机会。通过学习,我掌握了一些基础的开发技能,尤其是在数据库设计和管理方面有了更深…

SD-WAN稳定性如何?

随着网络技术的不断发展,软件定义广域网(SDWAN)作为一种新兴的网络架构,受到了越来越多企业的青睐。然而,对于许多人来说,关于SDWAN最关键的问题之一就是它的稳定性。本文将探讨SDWAN的稳定性表现&#xff…