Github用人工智能(AI)帮你的代码修正安全漏洞

  每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领域的领跑者。点击订阅,与未来同行! 订阅:https://rengongzhineng.io/

2023年11月,GitHub宣布推出代码扫描自动修复功能,借助AI技术为用户代码库中的安全漏洞提出修复建议。该文章深入探讨了自动修复的内部工作机制以及用于测试和迭代的评估框架。

github

代码扫描自动修复是什么?GitHub代码扫描通过分析仓库代码,找出安全漏洞和其他错误。扫描可以根据计划或特定事件(例如,推送至分支或打开拉取请求)触发。当发现问题时,会向用户显示警告。代码扫描可以与第一方或第三方警报工具配合使用,包括开源和私有工具。GitHub提供了一个由CodeQL支持的第一方警报工具,CodeQL是其语义代码分析引擎,允许像查询数据一样查询代码库。GitHub的内部安全专家开发了一套丰富的查询,可以跨多种流行语言和框架检测安全漏洞。在此检测能力的基础上,代码扫描自动修复通过建议AI生成的修复方案,进一步提升了安全性。在首次迭代中,自动修复针对拉取请求中检测到的CodeQL警告启用,首先支持JavaScript和TypeScript警告。它以自然语言解释问题及其修复策略,直接在拉取请求页面显示建议的修复方案,并允许开发者提交、忽略或编辑这些建议。

自动修复背后的基本思想简单明了:当诸如CodeQL之类的代码分析工具发现问题时,GitHub会将受影响的代码和问题描述发送给大型语言模型(LLM),请求它提出代码编辑建议,以修复问题而不改变代码功能。文章接下来深入讨论了构建LLM提示、处理模型响应、评估功能质量以及向用户提供服务的细节和微妙之处。

自动修复提示是技术的核心,GitHub向LLM发出请求,通过LLM提示表达。CodeQL静态分析检测到漏洞,生成警告,引用问题代码位置及任何其他相关位置。例如,对于SQL注入漏洞,警告会标记使用不受信任数据构建数据库查询的位置,并包括一个或多个流程路径,显示不受信任数据如何到达该位置而未经消毒。GitHub从警告中提取信息,构建LLM提示,然后要求模型展示如何编辑代码以修复漏洞。

GitHub采用严格的格式描述模型输出,以便自动处理。模型输出Markdown,包含:

- 详细的自然语言指令,用于修复漏洞。
- 需要的代码编辑的完整规格,按照提示中定义的格式。
- 如果适用,应添加到项目中的依赖项列表。

GitHub将自然语言解释与代码扫描警告一起展示给用户,随后是由代码编辑和添加的依赖项构成的差异补丁。用户可以审查建议的修复方案,必要时编辑和调整它,并将其作为提交应用于他们的拉取请求。

为了支持现实世界的复杂性并克服LLM的限制,GitHub采用了仔细的提示制作和后处理启发式规则。文章还概述了选择向模型展示的代码、添加依赖项、指定代码编辑的格式以及克服模型错误的方法。

通过广泛的自动化测试工具,GitHub能够对其提示和启发式规则进行迭代改进,同时最小化LLM计算成本。这种严谨的数据驱动开发方法使GitHub能够在同时将LLM计算需求降低六倍的情况下,将成功率提高了三倍。

用户体验通过增强代码扫描拉取请求体验,将有用的修复展示给用户。用户现在可以看到建议的修复方案,这可能包括多个文件中的建议更改,也可能超出拉取请求差异的范围。还会显示修复的自然语言解释。用户可以直接将建议的修复提交到拉取请求,或者在本地IDE或GitHub Codespace中编辑建议。

随着GitHub将代码扫描自动修复测试版推广给越来越多的用户,它正在收集反馈,修复小问题,并监控指标,以确保其建议实际上对野外的安全漏洞有用。与此同时,GitHub正在将自动修复扩展到更多语言和用例,并改进用户体验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/470161.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《Linux 简易速速上手小册》第2章: 命令行的艺术(2024 最新版)

文章目录 2.1 基本 Linux 命令2.1.1 重点基础知识2.1.2 重点案例:整理下载文件夹2.1.3 拓展案例 1:批量重命名文件2.1.4 拓展案例 2:查找并删除特定文件 2.2 文件和目录管理2.2.1 重点基础知识2.2.2 重点案例:部署一个简单的网站2…

shumei 滑块 qd参数仿写记录

在对qd参数进行仿写的过程中,由于缺失很多js的基础知识,导致进展一度非常的缓慢,并且不知道自己的方向是不是正确的方向。在不知道自己的方向是否正确的时候,这个时候自己的投入的努力都是畏首畏尾。大概是一种,不知道…

qml报错: QML Frame: Cannot anchor to an item that isn‘t a parent or sibling.

1、错误一:qrc:/main.qml:30:5: QML Frame: Cannot anchor to an item that isnt a parent or sibling. QML的anchor必须定位父级对象或者同级对象,不能定位到其他如:同级对象的子对象。 //main.qml import QtQuick 2.0 import QtQuick.Con…

【sgSearch】自定义组件:常用搜索栏筛选框组件(包括表格高度变化兼容)。

sgSearch源码 <template><div :class"$options.name" :expand"expandSearch" :showCollapseBtn"showCollapseBtn"><!-- v-clickoutside"(d) > (expandSearch false)" --><ul class"search-list"&…

【初学者向导】轻松加入OnlyFans世界:一站式订阅与支付指南!掌握使用虚拟卡的订阅技巧

目录 1. 引言2. 注册OnlyFans账户3. 浏览OnlyFans内容4. 选择订阅时长5. 开通虚拟卡 5.1. 什么是虚拟信用卡5.2. 如何开通虚拟卡 6. 使用虚拟卡订阅7. 总结8. 常见问题 1. 引言 什么是OnlyFans&#xff1a;OnlyFans是一种内容订阅服务&#xff0c;成立于2016年&#xff0c;允…

Codeforces Round 924 (Div. 2) B - D

B. Equalize 题目&#xff1a; 思路&#xff1a;首先排序然后去重&#xff08;可以用set来去重&#xff09;&#xff0c;我们可以肯定的是&#xff0c;如果连续k个数最大值最小值的差小于等于n的话&#xff0c;那么这个长度为k的区间就符合答案要求&#xff0c;那么k就和答案…

NULL和nullptr到底是什么?它们的区别又是什么?

目录 1.前言 2.剖析NULL 3. 剖析nullptr 4.nullptr与NULL的区别 1.前言 为了保持良好的编程习惯&#xff0c;我们在声明某个变量时都应该给这个变量合适的初始值&#xff0c;不然容易出现不可预知的错误。对于指针来说更是如此&#xff0c;在c语言中我们就通常将暂时没有指向…

挑战杯 python区块链实现 - proof of work工作量证明共识算法

文章目录 0 前言1 区块链基础1.1 比特币内部结构1.2 实现的区块链数据结构1.3 注意点1.4 区块链的核心-工作量证明算法1.4.1 拜占庭将军问题1.4.2 解决办法1.4.3 代码实现 2 快速实现一个区块链2.1 什么是区块链2.2 一个完整的快包含什么2.3 什么是挖矿2.4 工作量证明算法&…

9 个管理 Windows 硬盘的最佳免费磁盘分区软件 [2024 排名]

管理分区可能是一项具有挑战性的任务。当您想到删除、缩小、移动、磁盘分区或合并分区等方面时&#xff0c;您会认为它们是很难做到的事情。然而&#xff0c;虽然 Windows 自己的磁盘管理可以处理大部分问题&#xff0c;但它无法处理管理分区的所有方面。 这时候优质的磁盘管理…

【Cocos入门】物理检测

目录 一、物理检测的概念二、点测试三、矩形测试四、射线测试 一、物理检测的概念 CoCos中&#xff0c;物理检测也是物理系统的一部分&#xff0c;它不是用于检测物体的物理特性的&#xff0c;而是用来查询物体的(比如某个地方是否存在物理碰撞体)。其又分成&#xff1a;点检测…

关于VIT(Vision Transformer)的架构记录

在VIT模型设计中&#xff0c;尽可能地紧密遵循原始的Transformer模型&#xff08;Vaswani等人&#xff0c;2017年&#xff09;。这种刻意简化的设置的一个优势是&#xff0c;可扩展的NLP Transformer架构及其高效的实现几乎可以即插即用。 图&#xff1a;模型概述。我们将图像分…

「优选算法刷题」:和可被K整除的子数组

一、题目 给定一个整数数组 nums 和一个整数 k &#xff0c;返回其中元素之和可被 k 整除的&#xff08;连续、非空&#xff09; 子数组 的数目。 子数组 是数组的 连续 部分。 示例 1&#xff1a; 输入&#xff1a;nums [4,5,0,-2,-3,1], k 5 输出&#xff1a;7 解释&…