如何保护 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 配置…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...
基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...
WPF八大法则:告别模态窗口卡顿
⚙️ 核心问题:阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程,导致后续逻辑无法执行: var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题:…...
