本文介绍Postman公司是如何构建安全可靠的BFF,可以作为参考来逐步完善的BFF安全建设。 主要是学习如何全局安全建设,具体实现的方式与工具可以选择适合项目情况的。
打造一个安全的BFF需要考量的点
- 单点故障和攻击
- 面向公众的服务
- 处理用户输入
- 如何对API安全性进行量化
安全指标
一个安全的接口需要满足以下3点
保密性 | 完整性(一致性) | 可用性 |
---|---|---|
只有授权人员才能访问合适的数据 | 你的服务提供的数据不会被篡改 | 内容可供授权用户按需使用 |
BFF的数据流向
下图反应了BFF在一个完整数据流扮演的角色,涵盖从流入到流出中各个阶段关键点。 主要有以下3个阶段
- 客户端发起数据流入BFF
- BFF与服务间交互
- BFF将服务结果整合流出给客户端
接下来我们从数据流入开始分析每个阶段需要的安全建设
数据流入时的安全建设
BFF接受到数据之后,首先要进行合法性校验

校验
BFF对于校验的力度
- BFF 不需要完成所有校验
- BFF 应该完成自己的生态范围检查
- 认证
- 请求头的检查
- 特定于业务逻辑的检查将推送到下游服务
关键路径
关键路径指在请求到达业务逻辑之前要调用的服务。关键路径的长度是对判断BFF验证量的指标。关键路径最好短且有错误处理机制。 常见的两个关键路径
- 身份验证服务
- 访问验证服务

最小特权原则
关于权限,一般采用保守的最小特权原则
- 用户只能访问必要的最小资源
- 默认情况下,始终假定用户无权访问
- 特定条件下才允许访问
示例
下图是Postman采用的BFF架构

他们将访问控制和校验从业务逻辑中分离。
使用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是一个循序渐进的过程。
- 安全是开发过程的一部分