Postman是如何构建一个安全可靠的BFF

本文介绍Postman公司是如何构建安全可靠的BFF,能够做为参考来逐步完善的BFF安全建设。 主要是学习如何全局安全建设,具体实现的方式与工具能够选择适合项目状况的。php

原文连接html

打造一个安全的BFF须要考量的点

  • 单点故障和攻击
  • 面向公众的服务
  • 处理用户输入
  • 如何对API安全性进行量化

安全指标

一个安全的接口须要知足如下3点git

保密性 完整性(一致性) 可用性
只有受权人员才能访问合适的数据 你的服务提供的数据不会被篡改 内容可供受权用户按需使用

BFF的数据流向

下图反应了BFF在一个完整数据流扮演的角色,涵盖从流入到流出中各个阶段关键点。 主要有如下3个阶段github

  • 客户端发起数据流入BFF
  • BFF与服务间交互
  • BFF将服务结果整合流出给客户端

接下来咱们从数据流入开始分析每一个阶段须要的安全建设npm

数据流入时的安全建设

BFF接受到数据以后,首先要进行合法性校验 浏览器

校验

BFF对于校验的力度安全

  • BFF 不须要完成全部校验
  • BFF 应该完成本身的生态范围检查
    • 认证
    • 请求头的检查
  • 特定于业务逻辑的检查将推送到下游服务

关键路径

关键路径指在请求到达业务逻辑以前要调用的服务。关键路径的长度是对判断BFF验证量的指标。关键路径最好短且有错误处理机制。 常见的两个关键路径服务器

  • 身份验证服务
  • 访问验证服务

最小特权原则

关于权限,通常采用保守的最小特权原则架构

  • 用户只能访问必要的最小资源
  • 默认状况下,始终假定用户无权访问
  • 特定条件下才容许访问

示例

下图是Postman采用的BFF架构ide

他们将访问控制和校验从业务逻辑中分离。 使用yeoman的预约义安全设置进行堆栈安装。

依赖包的维护

在依赖包的维护上,对lockfile使用严格的版本控制。并使用工具检查CI管道中容易受到攻击的依赖包。 工具:nsp, npm audit, snyk

强制安全检查

采用如下强制方案来作安全检查

  • 配置安全检查lint
  • 系统测试阶段捕获有问题的配置项
  • 使用postman collection 集成到CI管道中完成E2E测试。

BFF与服务间通讯的安全建设

经历关键路径后,BFF创建与微服务间的链接须要作如下几个方面的安全建设

服务内部的权限检查

  • BFF开发者与服务内部实现隔离
  • 防止身份验证信息在响应结果和日志中泄露
  • 容许秘钥轮换且不须要更改服务器端代码

标记请求

  • 将每一个传入请求与用户令牌关联
  • 每一个服务均可以利用此令牌来获取用户元数据并应用验证

越权漏洞排除

  • 避免IDOR
  • 全部用户发起的操做都必须具备基于用户令牌的验证。

日志

  • 敏感信息和用户信息过滤
  • 使用启发式的方法来防止意外记录。
  • 追踪BFF日志来预防用户我的身份信息偷取。

BFF与客户端通讯时出站内容安全建设

BFF接收到微服务的请求结果后,融合处理后返回给客户端,完成数据流出,此阶段须要作的安全建设以下。

HTTPS / HSTS

  • 根据须要和所需的用户信任级别选择证书
  • 确保第三方调用和重定向经过HTTPS
  • 确认全部内容均经过HTTPS后,实施HSTS(+预加载)。

Content-Security-Policy

  • 减小由恶意代码注入引发的危害。
  • 首先使用report-only mode 以防止反作用
  • 防止数据泄露的理想方法:hrefs未涵盖。

其余请求头

  • CORS: 谁能访问你的资源
  • X-XSS: 在某些浏览器中检测并阻止XSS
  • X-Frame-Options: 容许或拒绝在iframe中显示网站。
  • HPKP: 容许HTTPS网站抵制假冒行为
  • SRI: 验证第三方资产
  • 参考连接:OWASP Secure Headers Project

注意事项

  • 全部header的支持取决于客户端浏览器
  • 不能仅仅依靠Header来确保BFF的安全性
  • 此阶段的安全建设不能替代输入验证和输出格式化

BFF层自身的基础架构安全建设

完成了数据流上的安全建设,还须要对BFF层自身的基础架构作安全建设

审核与自动化

  • 须要审核的内容

    • 开发人员的访问权限
    • 操做配置
    • 建立新的资源
  • Postman 的作法

    • 使用Postman collection 来完成资源可靠建立。
    • 使用Postman Monitors 对服务进行按期审核
    • 使用Postman collection 完成健康检查 Health check
      • 根据环境验证关键配置
      • 若是出现明显错误,请阻止部署。 例如 泄露私钥。
      • 这是一个安全保障,不是做为测试流程。

SDLC 系统开发周期的变化

完成数据流和BFF层自身的基础架构安全建设,咱们站在系统开发周期上看看,postman是如何确保安全性。

明确安全KPI

  • 经过CVSS分数对漏洞进行分类。
  • 漏洞回归
  • 解决时间
    • -SLA
  • 外部安全报告

VAPT 漏洞评估和渗透测试

VAPT是开发后的步骤,用于评估软件版本的安全性。

  • 包含服务的黑盒和白盒测试。
  • 安全流程是自动化执行的。

总结

回顾安全指标

回顾开头的安全指标,Postman一共作了如下事情

保密性 完整性(一致性) 可用性
Validation 合法性校验 Request tagging 请求标记 Short critical path 短关键路径
PoLP 最小权限原则 Access control (IDOR) 访问控制 Platform audits 平台审核
Log scrubbing 日志清洗 Content security (HTTPS, SRI, CSP, etc.) 内容安全 Healthcheck 安全检查

要点

  • 创建BFF /公共API 时须要考量安全建设。
  • 创建安全的API是一个按部就班的过程。
  • 安全是开发过程的一部分

示例代码

github.com/ankit-m/tal…

相关文章
相关标签/搜索