在 Snyk 的 SecRel 客户研讨会库中,我们有一个名为 Breaking AI 的研讨会。本次研讨会将介绍生成式 AI 助手(例如 copilot 和 codium)如何帮助开发人员更快地编写代码。研讨会的一大亮点是,人工智能助手就像刚从编码训练营出来的初级开发人员:超级热心且乐于助人,但是 - 你真的想要检查他们的代码(对初级开发人员没有阴影 - 我们需要他们,他们太棒了!)。在研讨会中,我们展示了 AI 助手和 Snyk 的结合如何为您提供超能力 - 快速、安全地编写代码。
引用一位著名厨师的话,Snyk 现在凭借其 Deep Code AI Fix 功能“更上一层楼”。当发现安全漏洞时,Snyk Code 总是给出良好的修复建议。它甚至可以为您提供三个具有相同漏洞的其他开源项目的良好参考,并向您展示这些项目如何修复它。现在,得益于 Snyk 安全研究团队精心整理的数据、结合了生成人工智能和符号人工智能力量的混合人工智能模型以及机器学习模型,Snyk 现在可以轻松地自动修复许多常见的安全漏洞。最喜欢的 IDE。
在本博客中,我将演示如何在我们研讨会中使用的 Java 示例项目中最好地利用 Deep Code AI Fix (DCAIF)。源代码可以在这里找到。注意:该项目故意在多个方面存在漏洞,不适合在任何生产环境中使用。
如果您曾经参加过技术会议或在技术会议上发表过演讲,您就会知道最具挑战性的方面之一是创建和展示日程安排。
参考应用程序是一个糟糕的版本(我不是一个好的前端开发人员!)但是,它对于展示代码如何在技术上工作但同时不安全非常有用。
这是一个使用 Thymeleaf 模板引擎的 Spring Boot 应用程序。启动时,它使用流行的 faker 库生成随机演讲者、演讲标题和演讲描述数据。演讲标题和描述均来自《银河系漫游指南》一书的正文。注意:标题和描述可能并不都 100% 适合工作。你已被警告!
活动中生成的每个演讲者还有一个专门的页面,您可以在其中查看他们在会议上的演讲列表。我们将重点关注应用程序的这一部分。
要编译并运行应用程序,请执行以下命令:
mvn clean install mvn spring-boot:run
当您运行应用程序时,除了通常的 Spring Boot 横幅和其他输出之外,您还会看到如下内容:
Access talks for heath.davis at: http://localhost:8081/talks?username=heath.davis Access talks for russell.bernier at: http://localhost:8081/talks?username=russell.bernier Access talks for kenyetta.jones at: http://localhost:8081/talks?username=kenyetta.jones Access talks for howard.bailey at: http://localhost:8081/talks?username=howard.bailey Access talks for buddy.jast at: http://localhost:8081/talks?username=buddy.jast Access talks for jeanice.kertzmann at: http://localhost:8081/talks?username=jeanice.kertzmann Access talks for deborah.hamill at: http://localhost:8081/talks?username=deborah.hamill Access talks for horacio.renner at: http://localhost:8081/talks?username=horacio.renner Access talks for winfred.schuster at: http://localhost:8081/talks?username=winfred.schuster Access talks for tommie.hane at: http://localhost:8081/talks?username=tommie.hane Access talks for micah at: http://localhost:8081/talks?username=micah
注意:情况不会完全像这样,因为每次启动应用程序时,演讲者及其演讲都是随机生成的。
如果您单击或复制/粘贴其中一个链接,您将看到一个演讲者页面,其中包含他们的演讲列表:
看看 TalkController.java。这就是演讲者页面的呈现方式。你能发现这个漏洞吗?
我们不希望您必须依赖您的眼球!我们希望开发人员快速行动并编写安全的代码。
我使用 IntelliJ Idea 来编写我的 Java 应用程序。我还使用 Snyk 的 IDE 扩展。好消息是,所有流行 IDE 都有 Snyk IDE 扩展,支持多种编程语言。
如果您想继续操作并且没有 Snyk 帐户,您可以在此处免费创建一个帐户。
我有没有提到这个应用程序有很多漏洞?那是因为我们在我们的工作室中使用它。我要重点关注的是TalkController.java中的那个:
这些都是对于解决问题非常有用的信息。但是,请注意 #1 漏洞左侧有一个小闪电图标 (⚡️)。说明该漏洞可以自动修复。
如果将鼠标悬停在红色波浪线上,您将看到修复此问题的选项:
在查看 Deep Code AI Fix 结果之前,让我们先看看副驾驶会为我们做什么。
这是我在第 42 行给 copilot 的提示以及它注入的代码:
// guard against XSS username = username.replaceAll("", ">");
这个可能可以对抗幼稚攻击,但是它可以对抗所有类型的 XSS 攻击吗?我不太确定。事实上,当我重新运行 Snyk 扫描时,XSS 漏洞仍然存在。
让我们看一下 Snyk 的修复:
String usernameStr = "" HtmlUtils.htmlEscape(username) "'s talks"; ================================================
现在,这个我喜欢。它使用惯用且预期的方法以及内置 Spring Boot 库:HtmlUtils。我相信这将彻底净化输入:用户名。新的 Snyk 扫描显示该漏洞已不存在。
确实,竖起大拇指! Snyk 自动修复不仅解决了该漏洞,而且以与所使用的框架(本例中为 Spring Boot)相匹配的方式实现了这一点。
在这篇文章中,我向您展示了 Snyk 的 Deep Code AI Fix 如何超越修复建议,并可以代表您进行修复。您还可以通过查看原始安全漏洞不再存在来确认修复的好处。
在 Snyk,我们喜欢人工智能助手,但他们在安全方面不太擅长。我们的研究表明,新一代人工智能生成不安全代码的速度与人类大致相同——大约 40%。这是有道理的,因为像 Copilot 这样的纯 Gen AI 解决方案主要在现有代码上训练他们的模型。 Snyk 的混合方法包括符号 AI、Gen AI、机器学习和我们安全团队的策划培训,为结果提供了安全第一的方法。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3