如何高效的对网站源代码进行安全审计?

每个公司都有一座代码设计山,这些低质量代码困扰着这一代程序员。许多勇士试图翻开这些代码重新开发,但他们经常在开发中创造出另一个BUG。到目前为止,我一直是某公司核心用户产品的一线研发人员,微软某公司的架构师,目前是某创业公司的技术负责人。伴随着工作经验的积累,我对代码质量安全的重要性认识也越来越深刻。了引发可见的功能性bug外,低质量代码更可怕的是使项目难以长期维护,影响系统迭代效率。任何对技术有追求,对业务有责任感的程序员们都希望避免这种情况。


怎样提高代码质量,结合自己的经验,有以下几点可以尝试:积极提高团队代码的品味和结构意识。代码是人写的,所以团队成员主观追求代码设计也是最重要的一点。最理想的情况是团队成员足够优秀,写出来的代码质量很高。但是现实面临的情况要复杂得多,团队成员会流动,不同的人有不同的代码习惯。在这种情况下,如何保证项目代码的质量是每个人的重要工作。在这方面很多工作要做:建立团队代码标准,利用领域驱动设计进行业务重建,要求单元测试提高单个测试的覆盖率等。但是,投入精力做这些往往对简单快速的功能发布没有帮助。这些非功能性的工作需要teamleader做好时间规划,有长远的全局意识。


参考书目《代码整洁之道》、《结构整洁之道》、《设计模式》、《重构:改进现有代码的设计》。理解和思考需求。开发人员在面对需求时,应该多问问自己:是否充分了解当前的需求?PM提出的需求是否合理?是否符合当前业务的核心逻辑?短时间内开发某一功能上线是否能保证质量?怎样合理地估计需求?在接受需求时,都要考虑到这些问题,而非一味地成为实现需求的工具人。


通过静态分析控制代码质量。除以上主观提高代码质量外,还可以从防御的角度建立代码质量自动化检测流程。大公司一般都有比较成熟的DevOps系统,其中最关键的一步就是代码质量分析。代码质量分析依靠静态分析技术,通过推理程序结构的执行逻辑,找出代码规范、安全漏洞、运行缺陷等质量问题。业界对SonarQube的普遍使用,我贴出一张介绍给你感受:SonarQube是,SonarQube采用B/S架构,有助于检查代码缺陷,提高代码质量,提高开发速度,通过插件形式,可支持Java,C,C++,JavaScripe等20多种编程语言的代码质量管理和检测。利用客户端插件对源代码进行分析和扫描,sonar客户端可采用IDE插件、Sonar-Scanner插件、Ant插件和Maven插件等方式,通过各种分析机制对项目源代码进行分析和扫描,并将分析扫描后的结果上传到sonar的数据库中,通过sonarweb界面对分析结果进行管理,可从七个维度检测代码质量:(1)复杂度分布(complexity):如果代码复杂度过高,将难以理解(2)重复代码(2):程序中包含了大量的复制、粘合、粘合、粘合、粘合、粘合、粘合、粘合、粘合、粘合、粘合、粘合、粘合、粘合等。


建立一个SonarQube环境并与DevOps集成需要一定的工作量,但相信我,这是绝对物有所值的。但SonarQube虽然好但也有局限性,即误报率高,听说Coverity要好很多,但并未实际使用。另外一个问题是我最近遇到的一个小插曲。现在公司的项目是国内的行业软件方案,在制作某个核心toG产品时,项目合作单位向我们提出交付软件需要质量认证的要求,并采用自主可控的国产静态分析方案。那时候团队用的都是sonar,担心没有合适的方案,最终会影响到项目的交付。老实说,以前搞互联网的一般都是开源软件,对国产软件的实力没有信心,特别是静态分析这一比较硬核的领域。

分享: