安全开发生命周期 - 模式
了解有关 Well-Architected Trust → 安全开发生命周期的更多信息
安全性必须在开发生命周期中集成,从初始设计到部署和运营。这些模式支持向左轮班安全实践,解决常见漏洞,并保护您的部署漏斗。
模式
| 何处查看 | 好样的 |
|---|---|
| 开发 | 工具 | ✅ IDE 安全扫描集成到开发人员工作流中 |
| 开发 | 设计 | ✅ 使用 STRIDE 方法在设计阶段完成威胁建模 |
| 开发 | 要求 | ✅ 用户数据趋势图中包含的安全要求和验收标准 |
| 开发 | 源控制 | ✅ 提交前挂钩强制实施安全策略(秘密扫描、代码分析) |
| 开发 | 培训 | ✅ 开发人员安全培训定期刷新,以反映不断变化的威胁 |
| 开发 | CI/CD | ✅ CI/CD 漏斗中的自动安全测试失败基于重要发现 |
| 开发 | 代码审查 | ✅ 身份验证、授权和数据访问代码需要安全同行审查 |
| 开发 | 代码分析 | ✅ 通过棉签和静态分析强制执行安全编码标准 |
| 开发 | 依赖性 | ✅ 依赖性漏洞扫描对每个提交运行 |
| 开发 | 测试 | ✅ 渗透测试范围包含正式发布前的新功能 |
反模式
| 何处查看 | 什么不好的样子 |
|---|---|
| 开发 | 测试 | ⚏ 安全测试推迟到发布前手动审核 |
| 开发 | 培训 | ⚏ 仅在入职期间进行一次安全培训 |
| 开发 | 代码审查 | 安全团队在合并后审查代码 |
| 开发 | 设计 | ⚏ 架构更改时威胁模型不会更新 |
| 开发 | 源控制 | 禁用密码扫描以减少误报 |
| 开发 | CI/CD | 发布截止日期临近时忽略的安全发现 |
模式
| 何处查看 | 好样的 |
|---|---|
| 注入 | ✅ SOQL 查询使用绑定变量防止注入 |
| 注入 | ✅ 在 SOQL、SOSL 或动态查询中使用前,用户输入已验证和消毒 |
| 注入 | ✅ 动态 SOQL 仅限于受信输入 |
| 访问控制 | ✅ CRUD 和 FLS 权限使用 Security.stripInaccessible() 强制执行 |
| XSS | ✅ Lightning 组件在 UI 渲染中逃避用户生成的内容 |
| 注入 | ✅ 外部 API 集成验证和消毒所有输入 |
| 访问控制 | ✅ 来宾用户访问权限最小化和严重受限 |
| 身份验证 | ✅ 用于外部身份验证的命名凭据(非硬编码凭据) |
| 身份验证 | ✅ 使用 PKCE 正确实施 OAuth 2.0 流 |
| 会话管理 | ✅ 会话安全策略强制实施超时和 IP 限制 |
| 配置 | ✅ 安全健康检查每季度审查一次,高风险发现已修复 |
| 访问控制 | ✅ 审核自定义元数据和权限,防止过度使用 |
反模式
| 何处查看 | 什么不好的样子 |
|---|---|
| 注入 | 使用带有用户输入的字符串连接构建的 SOQL 查询 |
| 访问控制 | 授予来宾用户简档创建、更新或删除权限 |
| XSS | Lightning 组件在模板中使用未转义的表达式 |
| 身份验证 | 外部集成在代码中使用硬编码凭据 |
| 记录 | 调试日志包含敏感数据,例如密码或 PII |
| 访问控制 | 忽略 FLS 和 CRUD 检查,因为“我们控制所有用户” |
| 配置 | 安全运行状况检查结果被忽略或无限期推迟 |
模式
| 何处查看 | 好样的 |
|---|---|
| 漏斗 | 源控制 | ✅ 分支保护规则强制实施所需的审查和状态检查 |
| 漏斗 | 访问控制 | ✅ 部署漏斗使用具有最低所需权限的服务帐户 |
| 漏斗 | 密码 | ✅ 存储在安全库中的密码(从不存储在源控制或环境变量中) |
| 漏斗 | 部署 | ✅ 生产部署需要授权人员的手动审批权限 |
| 漏斗 | 审计 | ✅ 部署日志通过批准跟踪捕获谁部署了什么 |
| 漏斗 | 验证 | ✅ 部署前验证包含安全扫描和合规检查 |
| 漏斗 | 访问控制 | ✅ 漏斗管理访问权限需要多重身份验证 |
| 漏斗 | 监控 | ✅ 漏斗配置更改会触发安全团队通知 |
| 漏斗 | 验证 | ✅ 部署后自动验证确认预期的安全控制处于活动状态 |
| 漏斗 | 依赖性 | ✅ 部署前评估了安全影响的依赖更新 |
反模式
| 何处查看 | 什么不好的样子 |
|---|---|
| 漏斗 | 密码 | 提交到版本控制的密码(即使稍后移除) |
| 漏斗 | 源控制 | 任何人都可以合并到主/生产分支,而无需审核 |
| 漏斗 | 访问控制 | 部署漏斗以管理员级别权限运行 |
| 漏斗 | 部署 | 生产部署完全自动化,无需审批门 |
| 漏斗 | 审计 | 部署日志不会捕获谁发起或批准了更改 |
| 漏斗 | 验证 | 忽略或绕过失败的安全扫描,以满足截止日期 |
| 漏斗 | 监控 | 漏斗配置更改未跟踪或审核 |
| 漏斗 | 验证 | 部署后验证仅检查功能正确性 |
模式
| 何处查看 | 好样的 |
|---|---|
| 测试 | 静态分析 | ✅ Salesforce Code Analytics 在开发人员 IDE 中运行以获得即时反馈,并作为自动网关在 CI/CD 漏斗中运行 |
| 测试 | 渗透测试 | ✅ 对暴露在不可信用户的自定义应用程序进行渗透测试,特别是 Experience Cloud 站点和面向公众的 API |
| 测试 | 单元测试 | ✅ 以具有不同权限简档的用户身份运行注重安全的 Apex 单元测试 |
| 测试 | 依赖性 | ✅ 依赖性扫描会监控 AgentExchange 软件包和 JavaScript 库是否存在已知漏洞 |
| 测试 | 安全审查 | ✅ 为每个 AppExchange 或 AgentExchange 安全审查提交准备静态分析报告 |
| 测试 | 安全审查 | ✅ 在解决方案集成第三方 Web 应用程序或服务时准备的动态扫描(渗透测试)报告 |
| 测试 | 依赖性 | ✅ 订阅和监控已安装软件包的安全建议 |
反模式
| 何处查看 | 什么不好的样子 |
|---|---|
| 测试 | 覆盖范围 | ⚏ 安全测试仅依赖于静态分析等单一技术 |
| 测试 | 单元测试 | Apex 测试验证功能行为,但绝不以较低权限用户身份运行 |
| 测试 | 安全审查 | 无需所需的静态分析或动态扫描报表即可准备 AppExchange 或 AgentExchange 提交 |
| 测试 | 渗透测试 | 跳过面向公众的 Experience Cloud 站点和 API 的渗透测试 |
另请参阅: