# 拉取请求中 AI 支持的安全检测

AI 提供支持的安全检测使用基于 AI 的扫描引擎来查找拉取请求中未涵盖 CodeQL的语言和框架的安全漏洞。

> \[!NOTE]
> AI 支持的安全检测目前处于 公开预览 阶段，可能会有所更改。

AI 支持的安全检测是基于 AI 的扫描引擎在拉取请求上运行时产生的额外安全发现结果，可对 CodeQL 形成补充。 与 CodeQL 警报不同，AI 支持的发现结果仅适用于拉取请求，并且不会在存储库的安全视图中显示为积压工作警报。

虽然 CodeQL 为一组支持的语言和查询提供高精度静态分析，但许多存储库使用不涵盖的语言和框架 CodeQL 。 AI 支持的检测将覆盖范围扩展到 code scanning 这些领域，帮助你在不添加新工具或配置的情况下发现漏洞。

在 公开预览 期间，AI 支持的安全检测需要 GitHub Advanced Security 许可证和 GitHub Copilot 许可证。

使用会消耗 AI credits。 请参阅“[组织和企业的基于使用情况的计费](/zh/copilot/concepts/billing/usage-based-billing-for-organizations-and-enterprises)”。

## AI 驱动的安全检测的工作原理

AI 支持的安全检测会在已启用 CodeQL 默认设置且已启用 AI 支持的检测的存储库中的拉取请求上自动运行。 基于 AI 的扫描会在创建拉取请求时以及每次有新提交后触发，这一点与 CodeQL 相同。

AI 生成的发现结果仅供参考，不会阻止拉取请求被合并。 它们提供有关代码安全性在不中断工作流的情况下可以改进的位置的信号。

AI 扫描引擎直接处理拉取请求中的代码，无需构建系统。 它使用代码搜索等工具在决定是否标记问题时从存储库收集其他上下文。 它使用自己的专用提示，不使用自定义指令文件，例如 `/.github/copilot-instructions.md` 或 `/CLAUDE.md`。

AI 扫描运行不受 CodeQL 的状态影响。 如果 CodeQL 默认设置失败或处于等待状态，AI 驱动的检测仍将运行。

结果会在被发现后立即发布到拉取请求中。 如果 CodeQL 扫描需要更长时间才能完成，你可能会在 CodeQL 结果出现之前看到 AI 生成的发现结果，反之亦然。

## 发现结果在拉取请求中的显示方式

AI 生成的发现结果会与 CodeQL警报一起显示在拉取请求的“**对话**”和“**已更改文件**”选项卡中。 每个 AI 支持的查找都标有“AI”指示器，以便你可以将其与 CodeQL 警报区分开来。

每个发现都包括安全问题的说明和风险的说明。 大多数发现还包括建议的修正，但并不是每个发现都有一个。 如果有可用的建议修复方案，则会包含 Copilot自动修复，并由其提供推荐的代码更改以修复该问题，与它对 CodeQL 警报的处理方式相同。 发现结果还包括一种向上/向下反馈机制，有助于随时间推移提高检测质量。

## Limitations

* AI 驱动的安全检测仅分析拉取请求。 不支持完整存储库扫描。
* AI 生成的发现结果尚不能在规则集中用于强制执行合并要求
* 随着功能的发展，检测类别和支持的语言可能会发生变化。
* 与任何基于 AI 的工具一样，结果可能会出现误报。 使用反馈机制报告不准确的结果。

## 支持的语言

AI 提供支持的安全检测旨在涵盖当前 CodeQL不支持的语言和框架。 这包括但不限于 PHP、Shell/Bash、Terraform 配置（HCL）和 Dockerfile 等语言，以及框架覆盖空白，例如用于 Java 的 JSP 和用于 C# 的 Blazor。

有关支持 CodeQL的语言的完整列表，请参阅 [使用 CodeQL 扫描代码](/zh/code-security/concepts/code-scanning/codeql/about-code-scanning-with-codeql)。

## 检测类别

AI 提供支持的安全检测目前涵盖以下类别。 这些类别描述如何对发现进行分类。 随着模型改进，AI 扫描程序可能会随着时间推移而演变。

* **字符串注入** — 不安全的字符串拼接生成的 SQL、HTML、Shell、JSON 或 YAML，存在缺失或不正确的转义或清理。
* **弱加密 - 弱** 算法、小密钥、不安全随机性、缺失加密或弱密码哈希。
* **中断的访问控制** - 路径遍历、CSRF 间隙或用户驱动的开放重定向。
* **敏感数据泄露** - 机密、令牌、密码或堆栈跟踪存储、记录或发送，且没有充分保护。
* **安全配置错误** - 有风险的默认值或设置，例如禁用安全控制或启用调试功能。
* **身份验证失败** - 缺少 TLS 或验证、不安全的身份验证流或缺少速率限制。
* **数据完整性失败** — 不安全的反序列化、对敏感操作使用 HTTP、原型污染，或执行不可信内容。
* **服务器端请求伪造 （SSRF）** - 服务器提取攻击者控制的 URL、主机或协议。
* **供应链风险** — 未固定的第三方操作、包或映像，或者未进行完整性检查的下载内容。

## 启用 AI 驱动的安全检测

默认情况下，企业级别不允许使用 AI 提供支持的安全检测，并在组织和存储库级别禁用。 企业管理员必须显式允许该功能，然后组织才能启用该功能。 组织管理员必须明确选择启用该功能。 存储库管理员可以选择退出该功能。 此外，还需要启用 CodeQL 默认设置。

无需选择模型来启用 AI 提供支持的安全检测。

* **企业**：“代码安全性”下的 **AI 查找** 策略控制组织是否可以启用该功能。 请参阅“[强制实施企业的代码安全性和分析策略](/zh/enterprise-cloud@latest/admin/enforcing-policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-code-security-and-analysis-for-your-enterprise#enforcing-a-policy-to-manage-the-use-of-ai-powered-security-detections-in-your-enterprises-repositories)”。
* **组织**：“代码扫描”下的 **AI 检测结果** 设置可为组织中的仓库启用由 AI 提供支持的检测。 请参阅“[配置组织的全局安全设置](/zh/code-security/how-tos/secure-at-scale/configure-organization-security/establish-complete-coverage/configuring-global-security-settings-for-your-organization#enabling-ai-powered-security-detections)”。
* **存储库**： **AI 发现** 在“代码扫描”下切换，启用或禁用单个存储库的 AI 驱动的检测。 存储库继承组织设置，但可以单独选择退出。