开发规范:API安全

news2024/9/21 16:22:20

开发规范:API安全

API是现代移动、SaaS和web应用程序的关键组成部分,可以应用在面向客户、合作伙伴和内部应用程序中。API可以暴露应用程序逻辑和敏感数据。不安全的API很容易成为黑客攻击的目标,使他们能够访问安全的服务器或网络。攻击者可以试图执行中间人攻击(MITM)、分布式拒绝服务攻击(DDoS)、注入或破坏访问控制等攻击。

以下是一些通用的API安全建议:

API 资产管理

列出并记录应用程序的所有接口。

必须了解API的暴露及别了解这些信息将有助于更好地定义哪些API安全控制必须加强,哪些必须使用默认的安全设置:

  • 内部API:内部访问的API,无需暴露在因特网,通过内部服务、后端/员工应用程序或合作伙伴通过VPN或其他安全手段在内部访问。

  • 外部API:暴露在互联网上的API,外部用户可以访问,不管他们是合作伙伴还是客户端。

对于API本身,我们可以根据以下几点对API进行分类:

  • 应用程序是由内部团队开发的还是由第三方合作伙伴开发的?
  • 应用程序是由另一个API/后端应用程序访问还是由前端应用程序访问?

不支持的版本:

  • 除了发布到互联网上的当前API版本之外,API不能有任何其他版本,任何特性都必须包含到最新的版本中,以符合最新的安全需求和最佳实践。
  • 较旧的和开发版本的API必须只能在开发环境中访问,在开发环境中不能使用任何真实的客户数据。

授权安全

  • 接口只能通过系统服务帐户运行,而不能通过任何个人帐户运行。
  • API密钥身份验证:内部API必须在所有场景中使用基于API密钥或其他类型的强身份验证,限制对每个端点的访问的方式,即使攻击者可以通过网络访问我们的内部虚拟网络。
  • API密钥最小权限授权架构:内部API密钥必须具有定义良好的基于角色的访问控制 (RBAC),以便分配它们以限制每个密钥只使用它们所需的权限功能,从而减少数据泄漏风险。

跨域访问:

  • 跨域请求必须使用安全机制(如跨源资源共享(CORS))和限制性策略(例如限制来自某些主机、域或禁用证书)。
  • 跨域请求的源报头必须在服务器端得到授权。
  • 服务应该实现最大请求限制(每个客户端或时间间隔)。
  • WebSockets必须使用wss:// schema和源报头额外的服务器端授权来传输所有机密数据。

安全配置

安全配置错误不仅会暴露敏感的用户数据,还会暴露应用系统的细节信息,可能导致整个服务器遭到破坏。

注入验证

执行输入验证是为了确保只有格式正确的数据才进入信息系统的工作流,防止格式错误的数据保存在数据库中,从而触发下游各个组件的故障。输入验证应该在数据流中尽可能早地进行,最好是在从外部接收到数据时进行。
  因此,我们的API接收的所有输入都必须经过验证,以便发现任何恶意输入或无效的信息尝试。这些检查必须对任何API的使用者进行,即使他们是内部的,因为他们可能有意或无意中输入的一些恶意的字符发送给API。
实现依赖于安全策略的正确输入验证控制。

防止过多的数据暴露

API通过设计将敏感数据返回给客户端。这些数据通常在客户端进行过滤之后呈现给用户。攻击者可以很容易地通过嗅探流量并查看敏感数据。
对于每个API的输出都应该进行规范化和细粒度:API必须有标准化的输出,考虑输出的颗粒度以最小化数据泄漏的风险,例如对用户ID或任何单一信息的请求应该只返回该信息,而不是与用户相关的所有数据。

  • 明确地显式定义和强制执行所有API方法返回的数据,包括响应模式、字符串模式、字段名和错误信息。
  • 检查来自API的响应,确保它们只包含合法的数据。
  • 定义应用程序存储和使用的所有敏感和个人信息(PII),并检查所有API调用和返回此类信息是最小必要的。
  • 不要依赖客户端来执行敏感数据过滤。

资源和速率限制

如果 API 不对客户端/用户可以请求的资源的大小或数量施加任何限制,这不仅会影响 API 服务器性能,导致拒绝服务 (DoS),而且还会为诸如蛮力攻击之类的身份验证缺陷敞开大门。

  • API必须实施访问速率的限制,以减少身份验证攻击的可能性或其他的恶意使用,并通过实现锁定策略防止滥用使用和可能的暴力尝试攻击。
  • 限制客户端在定义的时间范围内调用API的频率。实际的限制必须在每个API定义的基础上,分析可能的用例,如互联网开放API,将有许多用户但每个用户请求并不多,而相反在与合作伙伴进行数据处理的后端API中,单个用户请求会比较大。
  • 对于敏感操作,如登录或密码重置,应对通过API认证的方式、客户端IP地址、用户属性等实现对API进行速率限制。
  • 当超过限制数量时或重新设置新的和限制时间,须通知相关人员。
  • 为查询字符串和请求体参数添加适当的服务器端验证,特别是控制响应中返回的记录数量的参数。
  • 如果API接受压缩文件,在扩展文件之前检查压缩比,以对抗“zip炸弹攻击”

充分的日志和监控

日志记录和监控不足,再加上与事件响应的缺失或无效,使得攻击者可以进一步攻击系统、更持久地、转向更多的系统,进行篡改、获取或破坏数据。
因此,API也必须生成安全日志,并将这些日志集成到监视和SIEM(安全信息和事件管理)系统中。应该记录所有的在源系统和目标系统之间API事务和事件。

必须记录的信息如下:

  • 应用程序特性尝试失败
  • 拒绝请求/错误时使用的Key
  • 输入验证失败
  • 任何安全/使用策略失败

日志中不包括:

  • 敏感数据
  • 财务数据
  • 用户数据
  • 日志模式也应该在应用程序之间进行规范化,但是仍然需要定义确切的模型。

参考链接

  1. OWASP API Security Top 10 2019: https://owasp.org/www-project-api-security/
  2. NIST Guidelines on API Security: https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-204.pdf
  3. Cloud Security Alliance - API Security: https://cloudsecurityalliance.org/artifacts/security-guidance-api/
  4. Microsoft - API security best practices: https://docs.microsoft.com/en-us/azure/architecture/best-practices/api-design
  5. RapidAPI Developer Guide to API Security: https://rapidapi.com/blog/api-security-best-practices/

在这里插入图片描述

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

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

相关文章

甘特图是什么?利用甘特图来优化项目管理流程

在现代项目管理中,图表是一种强大而直观的工具,可以帮助项目经理和团队成员清晰地了解并掌控整个项目进程。其中,甘特图是最常用和最有效的图表之一。 甘特图是一种条形图,可以用来直观地展示项目中各个任务的进度、持续时间和相互关系。它由一个横轴和一个纵轴组成。横轴代表时…

Docker搭建LNMP+Wordpress的实验

目录 一、项目的介绍 1、项目需求 2、服务器环境 3、任务需求 二、Linux系统基础镜像 三、部署Nginx 1、建立工作目录 2、编写Dockerfile 3、准备nginx.conf配置文件 4、设置自定义网段和创建镜像和容器 5、启动镜像容器 6、验证nginx 三、Mysql 1、建立工作目录…

Vue集成three.js,加载glb、gltf类型的3d模型

安装基本依赖 // 注意OrbitControls要加{},注意路径是jsm import { OrbitControls } from ‘three/examples/jsm/controls/OrbitControls.js’; // import { dat } from ‘three/examples/jsm/controls/dat.gui.js’; // dat gui这个插件,是另外自己下载…

CentOS命令大全:掌握关键命令及其精妙用法!

CentOS是一种流行的开源企业级Linux发行版,它基于Red Hat Enterprise Linux (RHEL)的源代码构建。对于系统管理员和运维工程师来说,掌握CentOS的常用命令至关重要。 这些命令不仅可以帮助管理服务器,还可以进行故障排查、性能监控和安全加固等…

面试官:素有Java锁王称号的‘StampedLock’你知道吗?我:这什么鬼?

一、写在开头 我们在上一篇写ReentrantReadWriteLock读写锁的末尾留了一个小坑,那就是读写锁因为写锁的悲观性,会导致 “写饥饿”,这样一来会大大的降低读写效率,而今天我们就来将此坑填之!填坑工具为:Stam…

牛客NC99 多叉树的直径【较难 深度优先 Java/Go/PHP】

题目 题目链接: https://www.nowcoder.com/practice/a77b4f3d84bf4a7891519ffee9376df3 思路 核心就是树的最大直径(globalMax)一定是以某一个node为root最长的两个path-to-leaf. 就是普通dfs的同时算路径长度。时间: O(n), DFS一次 空间: O(n)参考答案Java impo…

制作一个RISC-V的操作系统十四-任务同步和锁

文章目录 并发与同步临界区和锁锁死锁解决死锁自旋锁(spin lock)原子性问题原子操作实现amoswap.w.aq例子 另一种方法自旋锁的注意事项代码其他同步技术 并发与同步 控制流:可理解为任务或进程 中断也可以理解为一个切换到另一个任务&#…

Webpack-入门

定义 静态模块:指的是编写代码过程中的html,css,js,图片等固定内容的文件 打包:把静态模块内容压缩、整合、翻译等(前端工程化) 1)把less/sass转成css代码 2)把ES6降级…

C语言-用二分法在一个有序数组中查找某个数字

1.题目描述 有15个数按由大到小顺序放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出“无此数” 二.思路分析 记录数组中左边第一个元素的下标为left,记录数组右边第一个…

GaussianCube:使用最优传输构造高斯溅射用于3D生成建模

GaussianCube: Structuring Gaussian Splatting using Optimal Transport for 3D Generative Modeling GaussianCube:使用最优传输构造高斯溅射用于3D生成建模 Bowen Zhang1⁣*    Yiji Cheng2⁣*   Jiaolong Yang3   Chunyu Wang3 张博文 1⁣* 程一季 2⁣* …

10.shell数组

shell数组 数组基本概述什么是数组数组的分类普通数组关联数组 数组的遍历与循环案例1:案例2:案例3:案例4: 数组基本概述 什么是数组 数组其实也算是变量,传统的变量只能存一个值,但是数组可以存多个值。 实际使用中主要通过for循环遍历数组中的数据 …

【万字长文】看完这篇yolov4详解,那算是真会了

前言 目标检测作为计算机视觉领域的一个核心任务,其目的是识别出图像中所有感兴趣的目标,并给出它们的类别和位置。YOLO(You Only Look Once)系列模型因其检测速度快、性能优异而成为该领域的明星。随着YOLOv4的推出,…

16 秒杀场景如何保证命中的存储分片不挂

从“第 12 讲”到“第 14 讲”,我们介绍了可以应对百万并发扣减请求,以及同时能够保障高性能的架构方案。此外,上述的架构方案还具备水平扩展能力,即当流量增加后,可以通过扩容底层存储和应用服务器来应对。 但面对百…

7-29 删除字符串中的子串

题目链接:7-29 删除字符串中的子串 一. 题目 1. 题目 2. 输入输出样例 3. 限制 二、代码(python) 1. 代码实现 str1 input().split(\n)[0] str2 input().split(\n)[0] while str2 in str1:str1 str1.replace(str2, "") // 删…

Elasticsearch概念 使用docker安装Elasticsearch和kibana

目录 一、Elasticsearch概念 倒排索引和正向索引 正向和倒排 二、ES安装 三、安装 kibana 四、IK分词器 下载ES中文分词器 扩展或停用词条 一、Elasticsearch概念 倒排索引和正向索引 正向索引 就像在mysql数据中搜索非主键字段的内容,就需要逐条数据的去查…

IDM下载器_Internet Download Manager 6.42.7

网盘下载 IDM下载器是一款针对互联网所打造的下载管理器。IDM下载器能将下载速度提高5倍,恢复因丢失的连接,网络问题,计算机关闭或意外断电而重新启动中断或中断的下载。IDM下载器还可支持所有流行的浏览器,以使用独特的“高级浏…

记录一次 vue3 + ele pls 改写 饿了么主题色实践

一、改写 element 主题色 在 main.ts 中引入需要改写的 scss 文件 main.ts: import ./styles/element-plus.scss在自定义的 element-plus.scss 文件中改写 ele pls 的变量 element-plus.scss: /** * 更改主题色 */ :root {--el-color-primary: #285fbb; // 主…

【智能算法】土拨鼠优化算法(PDO)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2022年,AE Ezugwu等人受到土拨鼠觅食行为与自然行为启发,提出了土拨鼠优化算法(Prairie Dog Optimization algorithm, PDO)。 2.算法原理 2.1算法思…

取地址及const取地址操作符重载

这两个默认成员函数一般不用重新定义 ,编译器默认会生成。 class Date { public : //这两个运算符一般不需要重载,使用编译器生成的默认取地址的重载即可,只有特殊情况,才需 //要重载,比如想让别人获取到指定的内容…

第十五届蓝桥杯省赛第二场PythonB组A题【进制】题解(AC)

解题思路 按照题意进行模拟,计算 x x x 的 b b b 进制过程中,若出现余数大于 9 9 9,则说明 x x x 的 b b b 进制一定要用字母进行表示。 x 8100178706957568def check(x, b):while x:if x % b > 10:return Falsex // breturn True…