如何保护 API 安全
为了收集有关 API 管理当前和未来状态的见解,我们邀请来自 18 家公司的 IT 专业人士分享他们的想法。我们问他们:“哪些技术和工具对于保护 API 最有效?” 他们告诉我们的是:
验证
我们经常向已知的 B2B 合作伙伴提供 API 访问权限。在这种情况下,将 API 访问限制为仅合作伙伴 IP 地址(白名单)的功能非常强大。您仍然需要进行身份验证和速率限制,但您已将流量减少到仅已知的合作伙伴。这消除了向更广泛的互联网开放的 API 上出现的大量恶意流量,例如暴力尝试获取访问权限和拒绝服务攻击。
即使设置了 IP 白名单,设置 API 网关仍然是最佳实践。这有助于身份验证并确保后端仅接收格式正确的 API 调用。
最常见的是 OAuth 和OAuth2,用于 API 之间的通信和安全通信。下面是基于令牌和基于声明的身份验证,其中 API 来回传递数字签名的令牌,以验证令牌是否代表调用者。
提供商实施的身份验证不均衡。即使使用 OAuth,其他人保留令牌的方式也可能是一个问题。代币的生命周期是如何管理的?令牌会刷新吗?在我们自己的基础设施中,我们使用一次性令牌,其范围主要限于我们想要执行的操作类型。它归结为安全令牌管理和基于证书的身份验证。
始终在授权之前对 API 进行身份验证 — 进行 API 身份验证的方法有很多,但多因素身份验证是通常推荐的方法。对于 API,使用外部进程(例如通过 OAuth 协议)获取访问令牌是很常见的。身份验证密钥最为敏感,必须妥善保管;但是,建议使用管理存储来自动化整个过程。
也就是说,仅凭身份验证不足以授予对 API 的访问权限,应该有一个授权步骤来确定哪些资源可以访问 API。检查授权是否正确的方法有多种,包括基于内容的访问控制 (CBAC)、基于角色的访问控制 (RBAC) 或基于策略的访问控制 (PBAC) — 这些方法可确保业务数据得到充分保护,免受未经批准的访问。
速率限制
确保 API 环境的安全涉及每个 API 接触点——对 API 客户端(第三方应用程序和开发人员或微服务)进行身份验证和授权、限制 API 调用速率以减轻分布式拒绝服务 (DDoS) 攻击以及保护处理处理请求的后端应用程序。 API 调用。
用于保护 API 的一些技术和工具包括:
1) 使用 JSON Web 令牌 (JWT) 来验证和授权 API 客户端 - 这些令牌包括有关客户端的信息,例如管理权限或到期日期。当客户端向 JWT 提供其 API 请求时,API 网关会验证 JWT 并验证其中的声明是否与您为客户端请求的资源设置的访问策略相匹配。
2)定义和实施访问控制策略,仅允许某些类型的客户端执行写入操作或访问定价等敏感数据。
3) 定义基于角色的访问控制,仅允许某些用户(例如特定组织内的开发人员)发布暴露敏感信息(例如定价或库存水平)的 API。
4) 通过应用速率限制策略来保护 API 本身,该策略为 API 网关每秒(或其他时间段)从指定源(例如客户端 IP 地址)接受的请求数量设置阈值。
5) 使用 HTTPS 保护后端应用程序 — API 网关和处理 API 请求的后端系统之间的流量应使用 HTTPS 协议。
断路器 - 限制和配额 — 一个好的做法是强制执行每个应用程序的数据使用配额,以便后端在发生 DoS、DDoS 攻击时不会受到影响,或防止未经授权的用户不当使用 API。每个资源的限制和配额不仅可以起到断路器的作用,还可以防止在不必要的使用激增期间对下游系统产生负面影响。具有配额和限制等策略的复杂 API 管理平台可以提供此功能。
更广泛的
我们的 API 安全方法中的三个关键领域:
1) 采用规范性方法
2) 仔细考虑应用程序身份如何与用户身份相关联
3) 从身份验证之外的最广泛意义上考虑 API 安全性,以减少入侵尝试。
规范模型:客户转向 OAuth 2 并覆盖 Open ID Connect。OAuth 2 有很多选择,Open ID 限制了选择并指导人们采用最佳实践。最终,最好实施一个清晰易懂的标准。类似于存储领域,考虑安全性、可用性和可扩展性之间的平衡。
应用程序和用户身份的角色:有许多 API 管理供应商尝试同时做到这两点。它只是不可扩展。身份管理是如此强大,以至于您无法跟上变革和新标准的步伐。我们与外部身份管理解决方案集成,并具有完全开箱即用的集成或 OAuth2 和 Open ID 用例。我们有开放的接口供客户根据需要将我们替换为他们自己的实现。
对于更广泛的安全问题:我们采取分布式实施安全的方法。默认情况下,API 管理的重点是提供 API 网关。我们采取的方法是 API 网关应该专注于流量的身份验证和授权。我们建议采用多层方法,并在具有 Apache Mod Security 的单独层中包含 Web 应用程序防火墙。当部署额外的安全性时要部署到网络边缘。最后是使用启发式或机器学习来监控流量行为并确定流量是否是恶意的。
其他
API 管理安全仍然是人们苦苦挣扎的领域之一。我们需要认识到 API 本质上是不安全的。我们需要重新学习 API 的安全性,并了解正在遭受攻击的互联网脆弱性。云提供商更加成熟。AWS 和 Azure API 管理工具提供了额外的安全层。考虑用户名、密码、密钥的安全性,并了解谁在使用您的 API。想想现在的数据,API 暴露的遗留系统在保护现有数据方面具有相同的思维方式。更多 API 消耗更多用户数据 — 如何存储以及在何处存储?
API 可能在两个主要方面构成安全风险。首先,依赖关系就像一组俄罗斯娃娃。在您的依赖项内部是依赖项的依赖项……在它们内部是您的依赖项、依赖项'、依赖项'等等。从功能角度来看,这使得每个开发组织都可以专注于为其添加最大价值的代码。
然而,从安全角度来看,作为最终消费者,您继承了整个漏洞链。应用程序安全专业人士必须超越基本的软件组成分析,将已知的 CVE 与版本字符串进行匹配,因为它们只深入一层。例如,Jackson-databind 是一个流行的开源库,在许多第三方通信SDK 中得到利用。
困扰该库许多版本的“jacksploit”反序列化漏洞可供某些 SDK 用户利用,但 Jackson-databind 的易受攻击版本已被混淆且无法被传统 SCA 识别。因此,安全专业人员必须寻找能够评估源代码如何工作的工具,而不是依赖于查找 CVE 数据库。
其次,由于 API 经常在外部传递数据,因此映射关键数据流以确保关键数据不会无意中泄漏到 API 中非常重要。这意味着要确定哪些变量至关重要,并绘制它们从源头到汇点的旅程以及途中的所有转换。这样,在将泄漏的路线投入生产之前,可以在开发过程中捕获未加密或未编辑的关键数据。
您需要拥有良好的 API 管理平台。它将强制执行您制定的规则和角色,以控制谁有权访问哪些数据。您可以使用带有选项的网关或平台,或者使用内置的身份验证和授权工具。能够以友好、易于配置的方式控制访问。Web 界面是执行和控制谁有权访问的最佳方式,无需部署或深入服务器并更新复杂的配置或文件。在网关级别进行控制,然后就可以轻松配置或管理。
相关文章:
如何保护 API 安全
为了收集有关 API 管理当前和未来状态的见解,我们邀请来自 18 家公司的 IT 专业人士分享他们的想法。我们问他们:“哪些技术和工具对于保护 API 最有效?” 他们告诉我们的是: 验证 我们经常向已知的 B2B 合作伙伴提供 API 访问权…...
工业机器视觉megauging(向光有光)使用说明书(十五,轻量级的visionpro)
程序(软件)的一些不足和建议:(后续会跟进) 不足:(如果你发现了,谢谢及时提出来) 1,找线工具有噪点抑制功能;blob跟随工具,匹配跟随工…...
Linux e2fsck命令教程:如何检查和修复文件系统(附案例详解和注意事项)
Linux e2fsck命令介绍 e2fsck是一个用于检查Linux第二扩展文件系统(ext2fs)的命令。它也支持包含日志的ext2文件系统,这些文件系统有时也被称为ext3文件系统。该命令会自动保存找到的坏块到文件系统中,以便这些硬盘的部分不再被使…...
TypeScript 的安装与使用
npm i typescript -g依赖会安装 tsc 命令 tsc -v初始化 配置 tsc --init生成 tsconfig.json tsconfig.json 配置 要支持 import 模块语法的话 rollup的配置 target 选项需要设置 ES5 module 选项需要改成 es2015 esbuild 的配置 target: ESNext module: ESNext moduleReso…...
Git版本管理配置说明 - Visual Studio
一、 Git服务端配置 在源代码管理服务器新建文件夹,并配置共享访问权限Everyone(读取/写入)。 在本地访问这台服务器共享目录,确保正确打开。 在VS中打开项目,点选Git更改,点击“创建Git仓库”,创建项目初始版本。 弹出如下对话框: 因为我们只是在局域网中开发项…...
Rust语言项目实战(四) - 界面绘制与渲染
回顾 前面的章节中,我们已经完成了下面的工作: 准备所需的音频文件设置游戏所需的屏幕和键盘配置创建了游戏主循环并在其中实现按键Esc或q退出游戏的功能游戏退出前还原配置 目前游戏的界面还是一片空白,本章我们开始为游戏在终端上绘制并…...
动态规划学习——回文串
目录 一,回文子串 1.题目 2.题目接口 3,解题代码及其思路 解题代码: 二, 分割回文串II 1,题目 2,题目接口 3,解题思路及其代码 一,回文子串 1.题目 给你一个字符串 s &…...
优化你的计算机性能:如何根据 CPU 占用率决定硬件升级
优化你的计算机性能:如何根据 CPU 占用率决定硬件升级 一、引言二、CPU 占用率的意义与影响三、监测和评估 CPU 占用率四、判断硬件升级需求的依据五、硬件升级方案和建议六、总结 一、引言 计算机性能优化是提升计算机系统整体效能的过程,它对于用户和…...
探索低代码之路——JNPF
目录 一、低代码行业现状 二、产品分析 1.可视化应用开发 2.流程管理 3.整个平台源码合作 三、架构和技术 技术栈 四、规划和展望 低代码平台(Low-code Development Platform)是一种让开发者通过拖拽和配置,而非传统的手动编写大量代…...
Day01 嵌入式 -----流水灯
一、简单介绍 嵌入式系统中的流水灯是一种常见的示例项目,通常用于演示嵌入式系统的基本功能和控制能力。流水灯由多个发光二极管(LED)组成,这些LED按照一定的顺序依次点亮和熄灭,形成一种像水流一样的流动效果。 二、…...
Redis集群详解
1.1 什么是Redis集群 Redis集群是一种通过将多个Redis节点连接在一起以实现高可用性、数据分片和负载均衡的技术。它允许Redis在不同节点上同时提供服务,提高整体性能和可靠性。根据搭建的方式和集群的特性,Redis集群主要有三种模式:主从复制…...
【随笔】个人面试纪录
面试被问了几个问题。 1.mount怎么用 没答上来,说的 --help 可以看 mount --help | less mount [ --source ] <source> | [ --target ] <target> 2.ansible怎么用,有哪些常用的模块 ansible <hosts|all> -m <module> 常用的模块…...
Vue3的reactive、ref、toRef、toRefs用法以及区别
在 Vue3 中,reactive, ref, toRef, toRefs 都是用于创建响应式数据的方法。它们之间的主要区别在于它们的使用方式和返回值类型。 reactive:用于将一个普通对象转换为响应式对象。当对象的属性发生变化时,视图会自动更新。 import { reacti…...
微信小程序:input双向绑定
微信小程序:input双向绑定 微信小程序:input双向绑定1 数据容器准备2 输入组件准备3 逻辑代码准备4 总结实战示例1.wxml文件导入2.js文件导入 微信小程序:input双向绑定 <说明> PS:该笔记采用渐进式编程,使每一步…...
RT-Thread ADC_DMA
看到这里,相信大家已经尝试过网上各类ADC_DMA传输的文章,且大多都并不能实现,因为在RT-Thread中并没有找到关于ADC的DMA接口,在官方例程中有关DMA的传输也只有一个串口接收的介绍,找遍全网怕也没能找到真正有用的消息。…...
生成带依赖Jar 包的两种常用方式:IDEA打包工具:Artifacts 和 maven-shade-plugin
文章目录 前言1、IDEA打包工具:Artifacts1.1 创建Artifacts1.2 选择第三方jar文件1.3 打包Artifacts1.4 测试jar包 2、maven-shade-plugin2.1、pom文件添加2.2、打包2.3、测试jar包 总结 前言 当我们编写完Java程序后,为了提高执行效率通常会将应用程序…...
idea 插件开发日志绑定问题
错误日志 Searchable options index builder completed SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/D:/gradle/caches/modules-2/files-2.1/com.jetbrains.intellij.idea/ideaIC/2021.2/b0727ceddea2b62b16825db9308e14a470198…...
Elasticsearch(ES)概述
文章目录 一.什么是Elasticsearch?1.正向索引和倒排索引2.Mysql和ES的概念对比3.安装elasticsearch、kibana 二.IK分词器三.索引库操作四.文档操作五.RestClient操作索引库1.初始化RestClient2.创建索引库3.删除索引库4.判断索引库是否存在 六.RestClient操作文档1.新增文档2.…...
网络入门---网络编程初步认识和实践
目录标题 前言准备工作udpserver.hpp成员变量构造函数初始化函数(socket,bind)start函数(recvfrom) udpServer.ccudpClient.hpp构造函数初始化函数run函数(sendto) udpClient.cc测试 前言 在上一篇文章中我们初步的认识了端口号的作用,ip地址和MAC地址在网络通信时…...
Linux系统安装Docker-根据官方教程教程(以Ubuntu为例)
Linux系统安装Docker-根据官方教程教程(以Ubuntu为例) 1. 背景介绍2. 环境配置2.1 软件环境要求2.2 软件下载2.3 文档地址2.3 必备命令工具下载 3. 安装Docker3.1 使用root用户操作后续命令3.2 卸载可能存在的旧版本 4. 安装Docker4.1 更新依赖包4.2 配置…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...
DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...
什么是VR全景技术
VR全景技术,全称为虚拟现实全景技术,是通过计算机图像模拟生成三维空间中的虚拟世界,使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验,结合图文、3D、音视频等多媒体元素…...
数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !
我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...
xmind转换为markdown
文章目录 解锁思维导图新姿势:将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件(ZIP处理)2.解析JSON数据结构3:递归转换树形结构4:Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...
32单片机——基本定时器
STM32F103有众多的定时器,其中包括2个基本定时器(TIM6和TIM7)、4个通用定时器(TIM2~TIM5)、2个高级控制定时器(TIM1和TIM8),这些定时器彼此完全独立,不共享任何资源 1、定…...
