什么是代码审计? "代码审计是对编程项目中源代码的全面分析,目的是发现错误,安全漏洞或违反编程约定,"维基百科说。我知道在一篇文章中引用维基百科就像在婚礼演讲中引用Merriam-Webster一样 - 但这一次他们做得如此正确,以至于他们值得称赞! 每个代码审核的目的是确保给定的程序是: - 安全
- 没有错误和缺陷,
- 易于维护和进一步使用,
- 与当前标准保持同步,
- 符合编码最佳实践。
跳过其中任何一个,你就会牺牲代码的质量和安全性,这可能会(而且很可能)带来灾难性的后果。糟糕的文档和技术债务可能会减慢甚至停止您的项目;错误和安全漏洞可能会使您的客户,声誉和良好的用户评级付出代价。而这仅仅是个开始。 通过代码审计,您将确保您的代码安全,无错误并准备好进行切换。 代码审计与代码审查阅读完上面的部分后,您可能会想:好吧,但是您刚刚描述的所有内容都可以在代码审查的帮助下实现,并且我们会定期运行这些内容! 确实,这些术语有时可以互换使用,但它们之间存在一些细微的差异。 代码审查包含在一个团队中 - 开发人员审查彼此的代码,他们只关注一个特定的部分。 另一方面,代码审计总是涉及整个项目,并由团队外部的人员执行 - 无论是其他开发人员,甚至是外部公司。 虽然代码审查是有用和必要的,但每隔一段时间执行一次代码审计会产生巨大的差异。让我在这里使用另一个比喻:评论就像检查汽车的不同部分是否存在潜在故障。当然,有必要看看前大灯是否正常工作,两个雨刷器是否正常,以及您的制动器是否正常工作......但是,除非你启动汽车,开车,并评估一切如何协同工作,否则你不会知道整台机器到底有多好。 正如不成文的规则所说,看到你的代码的人越多越好。从长远来看,您修复的越多,项目就越完美。 您何时可以从代码审计中受益?您可能会发现自己需要在许多不同的开发阶段和不同的情况下运行代码审核: 在将您的产品推向市场之前,要确保质量无可挑剔,并且第二天醒来时不会看到一堆一星评论; 继承遗留代码后,帮助您规划未来的工作并评估项目的范围,成本和时间框架; 在投资一个项目之前,要验证它是否是一个好的赌注; 每当你觉得你的产品不是最佳的。也许应用程序滞后,或者有一些太多的错误可以忽略?检查代码并应用更改永远不会太晚。
代码审计的好处代码审计有许多不同的用途。它们都取决于你的立场。 从开发人员的角度来看,您将获得以下优势: 如上所述,看到您的代码的人越多越好。如果您的产品已经过全面检查,则很可能在预发布时会发现任何潜在的错误和漏洞,您可以无压力地修复它们。更不用说它将帮助您安然入睡,因为知道所有工具都是最新的并遵循最大安全协议。 同一个开发团队从头到尾处理同一产品的情况极为罕见。同事可能会改变,有时一两个外包团队可能会加入这项工作,开发人员的总数可能会增加或减少。此外,源代码的每个部分都是由具有不同技能和能力的不同人员编写的。
这就是为什么建议您在每次获取以前从未使用过的源代码时都执行审核的原因(例如,我们通常在开始处理之前对从客户处收到的代码进行内部审核)。它将帮助您评估工作范围,一般质量和可维护性。 - 审计将帮助您避免技术债务。相信我,"这对未来的我来说是一个问题"在软件开发方面并不是一个好方法。
作为团队领导者,您会发现: - 自己执行代码审计或至少参与其中,将使您了解整个项目的概况。通常,团队领导不会每天看到代码,因此审计将帮助他们熟悉项目的当前状态,其结构和功能。
从严格的业务角度来看,您将获得以下优势: 审核有助于证明您的计划已准备好启动并介绍给您的客户和顾客。故障或安全漏洞可能会花费您很多钱和您的声誉。 一个最新的,新鲜的和技术相关的项目对开发人员更具吸引力。高质量的代码将吸引高素质的人才! 审核代码有助于简化和简化开发过程,这反过来又意味着工作可以更快地进行,并且阻止程序更少。
Python 代码审核 - 分步指南 + 清单在本节中,我们将介绍如何运行Python代码审计的分步过程。 每个小节都详细介绍了代码审核的关键元素。它将为您提供有关如何构建文档的想法。 我们还提供了有关如何确保您从一开始就遵循最佳实践的提示。您甚至可以在审核之前应用它们! 要查看最终结果应该是什么样子,请参阅下面免费PDF中提供的示例。它长达20多页,基于我们执行的真实代码审计。 让我们开始吧! 1. 代码库一开始,检查是否具有跟踪和提供源代码更改的版本控制系统(例如 GIT)非常重要。验证它是否维护良好。 提示:考虑根据 Gitflow 工作流进行工作,该工作流"规定了要设置的分支类型以及如何将它们合并在一起"。注意分支的正确名称。如果你的产品特别庞大,请考虑使用适当的 Git 标记。它使管理更大的项目变得无限容易。 2. 软件架构a) 技术选择本节的重点是验证技术堆栈是否是项目的最佳选择,以及它是否内部兼容。 当您开始验证技术选择时,第一步应该是检查使用的所有应用程序是否都根据 LTS 版本命名,以及它们是否是最新的。 这在实践中意味着什么?例如, Django应用程序与其他数据库引擎(如MySQL)相比,更频繁地 与Postgres一起使用。虽然不太受欢迎的选择在技术上并不一定较弱,但选择它们将大大减少您寻求任何潜在问题帮助的机会。 为了评估项目的可持续性,必须考虑到这些方面。 b) 部署配置始终值得检查使用哪些服务来支持应用程序。您应该注意提供托管服务的软件(uwsgi,gunicorn,nginx)和托管方法(无论是云还是本地)。 提示:没有明确的答案,哪些方法是正确的 - 每种托管类型都有其优点和缺点。一切都取决于您正在处理的项目类型。 但是,我真诚地推荐云托管。它不仅可以帮助您节省资金(无需关心硬件,减少维护,提高生产力),而且还可以获得更高的应用程序可用性。大多数云提供商提供超过 99,99%!下一步是验证应用程序是否包含负责项目虚拟化的文件。 提示:我强烈建议使用 Docker。它允许在开发阶段解决许多潜在的问题和错误,因为开发版本在与产品版本相同的环境中运行。 然后,是时候检查自述文件是否包含所有必要的元素了: 配置说明, 安装说明, 用户手册, 清单文件(附带文件列表), 有关版权和许可的信息, 分销商和开发商的联系方式, 已知的错误和故障, 问题解决部分, 一个更新日志(适用于开发人员)。
在修订项目目录时,应检查它是否包含负责持续集成和部署的文件 (CI/CD)。 提示:结构良好的 CI/CD 管道可以极大地使您的项目受益。它们允许以更有效的方式构建程序,但它们还包括负责在代码构建期间测试应用程序并验证其有效性的脚本。 检查项目配置并验证它是否不包含第三个人可以找到的任何密码。 提示:建议将运行应用程序所需的所有登录名和密码保存在环境变量中,无论是在运行应用程序的计算机上,还是在负责 CI/CD 的工具中。 3. 编码最佳实践本节的外观将有所不同,具体取决于编程语言和您使用的包/库。 使用 Python,您需要仔细检查代码是否符合 PEP 8 样式指南和 PEP 257 文档字符串约定。 好消息是,您不必手动完成所有操作。有一些工具可能会帮助您一路走来。 a) 林特b) 其他独立工具PyFlakes —— 另一个错误检查器(它只检查逻辑错误,不检查样式,但它的工作速度更快);
c) 代码分析和格式化工具Radon - 一种Python工具,从源代码中计算各种指标; Isort - 一个Python实用程序/库,用于对导入进行排序;
尽管这些工具可以极大地自动化并加快您的工作速度,但手动分析代码以找到任何潜力仍然是值得的: 错误 瓶颈 性能问题, 安全漏洞, 与维护应用程序相关的危险。
4. 未来提示:如何确保代码的质量代码审核可以帮助改进代码并消除任何现有问题。 但是,如果在运行代码审计时,需要改进的事项列表感觉太长,请尝试熟悉一些好的做法。虽然并非所有这些都适用于每个团队,但以下是一些值得考虑的问题: 最后的思考我们希望我们关于如何运行代码审核的指南将帮助您自己执行代码审核,或者评估一个好的审核文档应该是什么样子。
|