本文介绍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分数对漏洞进行分类。
- 漏洞回归
- 解决时间
- 外部安全报告
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…