第 8 章 安全性、可维护性和可靠性 安全性、可维护性和可靠性
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
本章将讨论振动编码和人工智能辅助工程的一个重要方面--确保在人工智能辅助下生成的代码是安全、可靠和可维护的。 如果生成的软件漏洞百出或容易崩溃,那么速度和生产率就毫无意义了。
首先,我将研究人工智能生成的代码中常见的安全隐患,从注入漏洞到机密泄露。您将学习审计和审查人工智能编写的代码是否存在此类问题的技巧,从而有效地为您的人工智能配对程序员提供安全保障。
接下来,我将讨论如何围绕人工智能生成的代码建立有效的测试和质量保证框架,以便及早发现漏洞和可靠性问题。性能方面的考虑因素也将包括在内。人工智能可能会写出正确的代码,但并不总是最高效的代码,因此我将概述如何识别和优化性能瓶颈。我还将探讨确保可维护性的策略,例如强制执行一致的样式或重构人工智能代码,因为人工智能的建议有时可能不一致或过于冗长。
我将向您展示如何调整您的代码审查实践以适应人工智能辅助工作流程,并强调人工审查员在审查部分或全部由机器生成的代码时应关注的重点。最后,我将总结从持续集成管道到生产中的监控等方面的最佳实践,以便放心地部署人工智能辅助项目。在本章结束时,你将拥有一套工具包来确保你的人工智能加速开发安全稳健。
人工智能生成的代码中常见的安全漏洞
人工智能编码助手虽然功能强大,但如果引导不当,也会在不经意间引入安全问题。 它们会从大量的公共代码中学习,其中既有好的做法,也有坏的做法,如果没有提示或上下文的引导,它们可能会重复不安全的模式。了解这些常见陷阱对您来说至关重要,这样您才能发现并解决它们。这包括使用手动和自动方式来检测潜在的安全问题(见图 8-1)。
图 8-1. 人工智能引入的安全漏洞:人工智能生成的代码可能包含微妙的安全漏洞,需要仔细审查和自动安全扫描来识别和修复。
在人工智能生成的代码中观察到的一些典型安全问题包括
- 硬编码秘密或凭证
-
有时,,人工智能会在代码中输出API 密钥、密码或令牌,尤其是在其训练数据中有类似示例的情况下。例如,如果您要求它与 AWS 集成,它可能会直接在代码中放入一个假的 AWS 密钥。如果这样做是很危险的,如果代码被共享,可能会泄露敏感信息。请务必确保通过环境变量或配置文件对密钥进行妥善管理。如果人工智能建议使用
api_key = "ABC123SECRET"这样的密钥,请将其视为一个标志--真正的密钥不应出现在源代码中。 - SQL 注入漏洞
-
如果您让人工智能模型生成 SQL 查询或 ORM 使用,请检查它是否通过直接连接用户输入来构造查询。例如,一个不安全的模式是
sql = "SELECT * FROM users WHERE name = '" + username + "'";
这很容易受到注入攻击。如果你没有明确告诉人工智能对查询进行参数化,人工智能可能会产生这样的结果。一定要使用准备语句或参数绑定。如果想起最佳实践(如在 SQL 中使用
?或用户输入的占位符),许多人工智能助手都会这样做,但这并不能保证。您需要进行验证,并在必要时要求人工智能进行修正:Modify this query to use parameters to prevent SQL ...