如何保护 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 界面是执行和控制谁有权访问的最佳方式,无需部署或深入服务器并更新复杂的配置或文件。在网关级别进行控制,然后就可以轻松配置或管理。 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
ava实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),可运行高分资源 Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。下面详细介绍C语言的基本概念和语法。 1. 变量和数据类型 在C语言中,变量用于存储数据,数据类型用于定义变量的类型和范围。C语言支持多种数据类型,包括基本数据类型(如int、float、char等)和复合数据类型(如结构体、联合等)。 2. 运算符 C语言中常用的运算符包括算术运算符(如+、、、/等)、关系运算符(如==、!=、、=、<、<=等)、逻辑运算符(如&&、||、!等)。此外,还有位运算符(如&、|、^等)和指针运算符(如、等)。 3. 控制结构 C语言中常用的控制结构包括if语句、循环语句(如for、while等)和switch语句。通过这些控制结构,可以实现程序的分支、循环和多路选择等功能。 4. 函数 函数是C语言中用于封装代码的单元,可以实现代码的复用和模块化。C语言中定义函数使用关键字“void”或返回值类型(如int、float等),并通过“{”和“}”括起来的代码块来实现函数的功能。 5. 指针 指针是C语言中用于存储变量地址的变量。通过指针,可以实现对内存的间接访问和修改。C语言中定义指针使用星号()符号,指向数组、字符串和结构体等数据结构时,还需要注意数组名和字符串常量的特殊性质。 6. 数组和字符串 数组是C语言中用于存储同类型数据的结构,可以通过索引访问和修改数组中的元素。字符串是C语言中用于存储文本数据的特殊类型,通常以字符串常量的形式出现,用双引号("...")括起来,末尾自动添加'\0'字符。 7. 结构体和联合 结构体和联合是C语言中用于存储不同类型数据的复合数据类型。结构体由多个成员组成,每个成员可以是不同的数据类型;联合由多个变量组成,它们共用同一块内存空间。通过结构体和联合,可以实现数据的封装和抽象。 8. 文件操作 C语言中通过文件操作函数(如fopen、fclose、fread、fwrite等)实现对文件的读写操作。文件操作函数通常返回文件指针,用于表示打开的文件。通过文件指针,可以进行文件的定位、读写等操作。 总之,C语言是一种功能强大、灵活高效的编程语言,广泛应用于各种领域。掌握C语言的基本语法和数据结构,可以为编程学习和实践打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千源万码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值