IT公司安全编码协议

安全设计

将安全融入软件开发生命周期的各个阶段

客户希望在IT应用开发流程的初始阶段就融入更多安全保障措施。为此,我们制定了一套详尽且完善的安全编码规范与规程,将安全流程、测试、规划及扫描环节深度整合至软件开发生命周期的各个阶段。

 

SEIRIM 成功实现了显著提升企业网络安全水平、提高代码质量,并将自动化测试与持续集成(CI)实践融入其工作流程的目标。我们分阶段实施了多种工具和实践,从代码规范检查(linting)到 CI/CD,全面提升代码规范性、应用安全性、测试可靠性及交付高效性。

项目目标

目标

提升代码质量并引入代码规范检查

为了在开发早期实施统一的编码规范并防止语法错误,这些工具有助于减少因代码不一致而引发的错误,并通过统一的代码格式提升团队协作效率。 

引入持续安全扫描

主要目标包括:定期模拟攻击并检测诸如 XSS 和 SQL 注入等漏洞,在 CI 流水线中自动检测并修复开源组件漏洞,防止不安全组件被集成到生产环境中,确保 Web 应用程序在发布前的安全性。

部署自动化测试

为了提升整体代码质量,一项关键目标是通过单元测试和集成测试来验证核心应用逻辑,帮助捕捉回归问题,并确认新功能不会破坏现有功能。此外,还需要进行模拟用户交互的端到端测试,确保应用程序在用户视角下以及不同浏览器中都能正常工作。

CI/CD 集成过程中的安全阶段

一个关键目标是实现软件交付流程的自动化,在代码发生变更时触发测试、扫描和部署任务,确保各个构建保持一致性、速度和可靠性。另一项重点是确保安全增强措施不干扰流水线管理、维持平台统一性且不增加配置复杂性。

降低安全漏洞风险

总体目标是在软件开发生命周期(SDLC)的早期阶段发现并修复问题,因为此时处理这些问题的难度较低且成本较少。同时从整体上防范各类安全漏洞,在所有产品中保护用户和客户数据,降低发布后发生重大安全事件、系统停机或受到监管处罚的风险。

确保系统易用性

至关重要的是,系统必须易于使用,避免引入过于繁琐的复杂性,以免阻碍高效且盈利的软件开发。否则,使用难度过大,将无法被团队采纳,也无法帮助提升组织的安全性。毕竟,早期发现问题在成本效益上远优于部署后的修复,且能确保安全性成为产品质量不可或缺的一部分,而非事后的补救措施。

 

致力于安全性提升

为建立安全编码规范而实施的策略

SEIRIM 的目标是显著提升公司网络安全防护水平、改进代码质量,并将自动化测试和持续集成实践融入工作流程。公司通过分阶段实施从代码规范检查到 CI/CD 在内的一系列关键工具和实践,着重优化代码规范性、应用安全性、测试可靠性以及交付高效性。

第一阶段:代码质量与代码规范检查

1. ESLint 和 Prettier
首先,团队通过使用 ESLintPrettier 来统一 JavaScript 和 TypeScript 代码库的一致性。这些工具被配置用于标记语法错误、强制执行编码规范并自动格式化代码。在开发早期引入这些工具,有助于开发者从一开始保持代码整洁。两款工具简单易用且采用零成本许可协议,是理想的入门选择。

 

2. SonarQube
在完成基础的代码检查后,引入 SonarQube 来进行更深层次的静态代码分析。它能够识别多语言代码库中的隐蔽错误、安全漏洞和性能问题。最初使用的是 Community Edition,后续计划升级到 Developer Edition,以获得更深入的洞察和更广泛的语言支持。其可视化仪表盘可帮助团队确定技术债务清理的优先级。

 

3. CodeClimate
为加强对代码长期可维护性的追踪,团队引入了 CodeClimate。它能汇总质量指标并展示长期趋势,帮助管理者发现问题区域,也让开发者了解自己代码改动的影响。它在代码审查阶段尤其有用,能够及早标记与可维护性相关的隐患。

 

其他代码工具:

第二阶段:安全扫描工具

4. ZAP(Zed Attack Proxy)
在应用程序趋于稳定后,团队引入了安全扫描环节。ZAP 作为第一道防线,通过模拟攻击来识别常见漏洞,例如 SQL 注入和跨站脚本(XSS)等。该工具的自动化能力以及开源特性,使其能够在不增加预算压力的前提下无缝集成。

 

5. Snyk
由于公司使用了大量开源软件包,团队采用了 Snyk 来监控这些依赖项。它会扫描第三方库和 Docker 镜像中已知的漏洞。DevOps 团队利用其 GitHub 集成功能,在拉取请求阶段发现问题,从而实现主动的漏洞管理。

 

6. WhiteSource Bolt / Mend
为了在 CI/CD 流水线中实现安全自动化,团队配置了 WhiteSource Bolt。它会持续扫描 GitHub 和 Azure DevOps 上的代码库,识别并在很多情况下自动修复依赖问题。其免费方案覆盖了大部分的即时需求,从而在无需额外预算审批的情况下实现快速部署。

 

阶段三:自动化测试框架

7. Jest 和 Mocha
接下来要务是构建稳健的自动化测试体系。JestMocha 被用于 JavaScript 应用的单元测试和集成测试。它们帮助开发人员及早发现逻辑和行为问题,在功能发布过程中提升对代码质量的信心。

 

8. Selenium
在单元测试趋于稳定后,开始部署 Selenium 对用户流程进行端到端测试。QA 工程师通过模拟真实用户交互行为,在每次发布前自动化执行回归测试。Selenium 基于浏览器的测试方式,有效确保了跨平台兼容性。

  

阶段四:性能测试工具

9. Lighthouse
为了监控前端性能和 Web Vitals 指标,我们在整个开发生命周期中定期通过 Chrome 开发者工具运行 Lighthouse。它会对页面加载速度、无障碍访问性、SEO 等方面进行审计,为开发者提供可操作的反馈,优化用户体验。

 

10. GTmetrix
Lighthouse 提供了宏观性能洞察,GTmetrix 则有助于更深入分析加载时间、瀑布流请求细分以及具体性能瓶颈。针对关键应用页面,我们会每周安排 GTmetrix 测试,并在每次冲刺回顾中审查测试结果。

 

11. WebPageTest
最后,我们会引入 WebPageTest 来验证全球范围内的性能表现。对于国际客户,由于不同地区的性能可能存在差异,该工具可以确保在制定优化策略时,将地理延迟和 CDN 表现等因素一并纳入考量。

   

阶段五:持续集成与交付(CI/CD)

12. GitHub Actions
CI/CD 的实施从 GitHub Actions 开始,在 GitHub 中直接实现构建、测试和部署的自动化。每次代码提交都会触发一系列检查,包括 ESLint 校验、Snyk 扫描和 Jest 测试。按需付费的模式使团队能够逐步扩展规模。

 

13. Jenkins
对于更复杂的自动化任务和内部服务器部署,团队引入了 Jenkins。凭借丰富的插件生态和强大的社区支持,Jenkins 支持自定义工作流、定时任务以及向非云端基础设施的部署。

 

14. GitLab CI/CD
对于使用 GitLab 代码库的团队,启用了 GitLab CI/CD。它提供了从代码仓库管理到部署的无缝体验,尤其适合偏好单一平台 DevOps 方案的团队。其紧密集成简化了权限控制、密钥管理和环境配置流程。

   

成果与收益

分阶段部署这些工具带来了显著改进:

 

  • 安全性:得益于主动扫描和依赖项监控,漏洞数量六个月内减少了70%以上。
  •  
  • 代码质量:借助 ESLint、SonarQube 和 CodeClimate,代码库的可维护性得到了提升,技术债务预警帮助开发人员及早处理问题。
  •  
  • 效率:CI/CD 自动化减少了手动测试和部署错误,将发布周期从两周缩短至不到五天。
  •  
  • 性能:通过 Lighthouse 和 GTmetrix 的优化,平均页面加载时间减少了30%以上。
  •  
  • 测试文化:开发人员的测试覆盖率显著提高,85% 的新功能都配有自动化测试用例。
来自客户

推荐语

感谢 SEIRIM 团队采用严谨的方式引导并激励我们开发团队实施更安全的流程。事实证明,该流程能切实有效地提升了代码的安全性。希望我们能继续深化合作,确保始终发布干净、可靠的代码。