需要做什么来保护API?

应用程序编程接口是现代应用程序架构解决方案,可通过改进连接性和启用可组合架构来支持数字业务。它们用于支持跨网络、移动和其他渠道的现代用户体验。它们还支持内部流程、客户和合作伙伴的集成和自动化。

在过去十年中,API 部署呈爆炸式增长,但随着这种流行,恶意行为者也开始关注。许多 API 安全事件已经发生,尤其是数据泄露。这些事件提高了人们对 API 漏洞的认识,但由于由 API 交互组成的大量 Web 流量,攻击和违规行为仍在继续发生。

许多组织保护 API 流量的方式与保护其遗留应用程序的方式相同。但是,通用应用程序安全控制不足以保护 API 事务。安全和风险管理领导者必须与应用技术专家合作,建立并完善他们的 API 安全计划,以应对这种日益增长的威胁形势

可见性:环境中存在哪些 API?

许多 API 泄露事件都有一个共同点:被泄露的组织直到为时已晚才知道他们的 API 不安全。API 安全的第一步是发现组织从第三方交付或使用的 API。

移动和 Web 应用程序是一个很好的起点。API 的另一个常见来源是应用程序集成,它涉及集成产品用来提供对应用程序或数据的访问的 API。一些组织可能还有一个开放的 API 程序,包括开发人员门户,并且必须保护这些公共 API。最后,考虑组织使用的任何第三方 API。

发现组织的 API 后,下一步是根据曝光度、业务环境和技术对它们进行分类。然后,确定 API 的潜在漏洞。最常见的 API 漏洞路径包括:

  1. 存储库和存储中的不安全 API 密钥:API 密钥或其他密钥,例如 SSH 密钥或 SSL/TLS私钥,可能会在基于云的存储或对公众开放的代码存储库中被发现。
  2. 应用程序中的硬编码 API 密钥: API 密钥或其他凭据可能在 Web和移动应用程序中进行硬编码,并在物联网设备或移动应用程序中受到反编译攻击。
  3. API 逻辑缺陷:API可能存在可被利用的错误或其他逻辑缺陷。
  4. 嗅探 API 调用:可以通过中间人方法嗅探 API 流量,从而发现 API 密钥或不安全的API。

访问控制:谁在访问 API,有什么访问权限?

访问控制是 API 安全的重要组成部分。它包含身份验证(验证主体身份的过程)和授权(确定主体是否有权访问特定资源的过程)。

访问控制功能中的漏洞通常是针对 API 的最常见攻击点,会导致数据泄露、丢失和操纵。Web 应用程序历来使用基本身份验证(用户名和密码)来允许用户访问。当组织开始部署 API 时,通常会继承这种机制。

成熟的组织使用现代 API 访问控制机制。现代 API 访问控制策略基于对组织用例的四个关键维度的评估:

  1. 身份功能:API用例的身份功能是身份验证、授权和加密。身份结构,即需要协调在一起以解决身份需求的工具,根据组织范围内的身份功能而有所不同。
  2. 应用程序:移动应用程序、内部或外部服务、Web应用程序和设备都是访问受保护 API的应用程序示例。这些应用程序通常由用户或机器身份(例如服务帐户)操作。不同的应用程序在如何验证自己和操作它们的人类用户方面具有不同的功能。
  3. 调解器:API受调解器(如企业或内部 API 网关)以及更灵活的调解器(如部署在 API 附近的边车)的保护。评估调解器的身份能力可确保 API访问策略包括调解器中的正确集成和执行。它还使组织能够评估访问管理工具对所用中介的支持。
  4. 开发人员支持:开发人员支持确保开发人员可以发布和控制他们自己的API,并控制他们在他们的 API中需要哪些属性。同时,控制必须基于委托模型,在该模型中,中央团队控制总体策略。了解开发人员支持维度可确保该策略包括正确的工具支持,例如开发人员自助服务界面。

为确保进行适当的风险评估和分类,请使用这些维度来定义组织的 API 访问控制要求。

威胁防护:攻击者如何利用API?

API 安全程序必须防范三种常见的攻击模式:拒绝服务、滥用功能和漏洞利用。API 威胁保护由运行时或外围技术组成,可识别和防止属于这三类的攻击。

典型的威胁防护技术包括:

  1. DDoS 保护:能够处理容量攻击的解决方案包括内容交付网络或 CDN、基于云和设备的 Web 应用程序防火墙或 WAF,以及云清洗中心或CSC 平台。对于应用层 DoS 攻击,具有 DoS 功能的硬件或基于云的 WAF可能是合适的。一旦攻击逐渐增加并开始淹没网络链接,就需要 CDN 或外部 CSC。
  2. WAF:一种解决方案,通过过滤和监控 HTTP流量以阻止常见的漏洞利用攻击,为 API 提供有限的保护。一些 WAF 还提供机器人缓解和应用程序或第 7 层 DDoS 保护。
  3. Bot缓解:一种解决方案,可为多种类型的脚本攻击提供高级保护。这些解决方案在这方面比一般的 WAF更有能力,这使它们成为防止滥用的可能的首选或补充。
  4. 专门的 API保护:通过结合参数和有效负载的内容检查、流量管理和异常检测的流量分析,提供针对 API 攻击和滥用的保护的解决方案。

这些技术共同构成了 Web 应用程序和 API 保护或 WAAP 解决方案。除了 WAAP 功能外,组织还经常将 API 网关和管理系统添加到其基础架构中。

随着 API 威胁态势的增长,应用程序安全领导者必须建立并完善他们的 API 安全计划,以应对这种日益增长的威胁态势。这种方法可以帮助组织建立全面的 API 可见性计划,设置机制来检查 API 是否符合组织的身份验证和加密标准,并为关键的面向外部的 API 部署专门的威胁防护。

在FastAPI中实现角色或权限控制,可以通过中间件或者依赖注入来完成。一种常用的方法是使用依赖注入结合用户信息和角色权限来控制访问。具体步骤如下: 1. 定义用户模型和权限模型:首先,你需要定义用户模型和权限模型,以便在应用程序中使用它们来验证用户的角色和权限。 ```python from pydantic import BaseModel class User(BaseModel): id: int username: str roles: list[str] class Role(BaseModel): name: str permissions: list[str] ``` 2. 创建依赖项来验证用户角色或权限:使用FastAPI的依赖注入功能,创建一个函数来检查用户是否具有足够的权限访问某个路由。 ```python from fastapi import HTTPException, Depends from fastapi.security import OAuth2PasswordBearer oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token") def get_current_user(token: str = Depends(oauth2_scheme)): # 这里应该有一个函数来验证token,并返回用户信息 # 如果验证失败,可以抛出HTTPException user = verify_token(token) return user def get_current_active_user(current_user: User = Depends(get_current_user)): if current_user.disabled: raise HTTPException(status_code=400, detail="Inactive user") return current_user def has_permission(user: User = Depends(get_current_active_user), permission: str = ""): # 检查用户是否具有所需权限 if permission and permission not in user.permissions: raise HTTPException(status_code=403, detail="Operation not permitted") return True ``` 3. 在路由中使用依赖项来保护路由:在定义路由时,可以将权限依赖项添加到路由函数中,以确保只有具有正确权限的用户才能访问。 ```python from fastapi import APIRouter router = APIRouter() @router.get("/protected-route") def protected_route(user: User = Depends(has_permission)): return {"user": user} ``` 4. 配置中间件或依赖项来提供用户角色信息:这通常涉及到设置一个全局中间件,该中间件会检查每个请求并附加用户信息,这样依赖项就能使用这些信息来执行权限检查。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值