从写代码,到创作下一幕

探索 字节跳动 - 火山方舟 的 AI 编程与视频创作活动。

Agent Plan & Coding Plan

一站体验多款热门模型,为 AI 编程与智能体开发提供更多选择。新用户可联系(微信: goo_lvyouyou)免费体验 9.9 agent plan。

Seedance 2.5

让创意,跃然成片。探索 30 秒视频、多模态参考与局部编辑,把脑海中的画面变成下一支作品。

中文

审查代码变更中的安全问题

以手动方式或在 CI/CD 中审查拉取请求和本地变更,查找安全回归问题。

运行安全变更审查,以查找 Git 支持的单个变更集中的回归问题。 Codex 会审查每个发生变更的源代码类文件及其直接相关的支持代码。 它不会将审查范围扩大为完整的仓库审计。

如果你希望扫描整个仓库而不是特定变更,请参阅运行 安全扫描。

运行手动审查

在桌面应用中,打开 Security,选择 Scans,然后选择 + Scan。 选择仓库,然后选择 Changes。审查未提交的变更、 单个提交,或基准修订和头部修订。变更扫描不支持 Deep scan。

你也可以在对话中要求 Codex 审查未提交的变更:

Use $codex-security:security-diff-scan to review my current uncommitted changes for security regressions.

对于提交或分支范围,请在需要时指定两端:

Use $codex-security:security-diff-scan to review the changes from origin/main to HEAD for security regressions. Focus on authentication, authorization, input handling, filesystem access, network requests, and secrets.

如果本地检出中存在拉取请求的基准修订和头部修订, 你也可以直接指定该拉取请求。

在设置过程中确认变更

  1. 选择 Changes。
  2. 确认已检出的仓库、当前分支和最新提交。
  3. 在 Changes to review 下选择:
    • Uncommitted changes,用于审查当前工作树。
    • 最新提交,用于审查单个提交。
    • 基准修订和头部修订,用于审查分支或拉取请求范围。
  4. 确认摘要描述的是你打算审查的变更。
  5. 选择 Start scan。

此工作流不会检出其他分支,也不会更改所选的工作树。 如果请求的修订在本地不可用,请在审查前将其提取到本地, 或提供本地可用的基准修订和头部修订。

处理发现

审查结果后,请修复并验证已接受的 发现,或导出并跟踪 发现。

在 CI/CD 中自动执行审查

当运行器可以在无需交互的情况下调用 Codex CLI 时,请从 CI 运行同一个 $codex-security:security-diff-scan 技能。 首先安装 CLI 和插件,并避免暴露扫描凭据:

npm install --global @openai/codex

在 CLI 中安装 Codex Security 插件:

codex plugin add codex-security@openai-curated

安装命令使用公共 Codex CLI 插件市场。在 CI 中依赖 特定插件版本或功能之前,请查看插件更新日志。

然后,仅在扫描期间将 CI 机密存储中的 OpenAI API key 公开为 CODEX_SECURITY_API_KEY:

CODEX_API_KEY="$CODEX_SECURITY_API_KEY" codex exec \
  --sandbox workspace-write \
  "Use \$codex-security:security-diff-scan to review changes from $BASE_REVISION to $HEAD_REVISION for security regressions. Do not modify the checkout."

扫描会将输出写入 $TMPDIR/codex-security-scans/<repository>/<scan-id>/:

文件 内容
report.md 完整扫描目录的主要可读入口。
findings/<slug>/ 请求时生成的详细漏洞报告和支持性概念验证文件。
hardening/ 请求时生成的结构性加固指南和支持性提案。
findings.json 包含稳定标识符、严重程度、置信度、源代码位置和修复措施的发现。可将其提供给已获批准的内部安全工作流或下游工具。
scan-manifest.json 密封的扫描收据,包含已审查的目标、修订和工件哈希。
coverage.json 已审查和推迟审查的部分、排除项以及覆盖完整度。

findings.json 架构 定义了完整结构。该架构包含以下字段:

字段 类型 说明
documentType 字符串 将文档标识为 codex-security.findings。
schemaVersion 字符串 标识发现架构的版本。
scanId 字符串 标识生成这些发现的扫描。
findings 数组 包含零个或多个发现对象。
findings[].findingId 字符串 从发现指纹派生的稳定发现标识符。
findings[].occurrenceId 字符串 标识特定扫描中此次出现的发现。
findings[].ruleId 字符串 标识漏洞系列。
findings[].identity 对象 包含语义锚点和可选的同级实例标识符。
findings[].fingerprints 对象 包含指纹算法和主指纹。
findings[].title 字符串 提供简短的发现标题。
findings[].summary 字符串 概述漏洞及其影响。
findings[].severity 对象 包含严重程度级别和可选的评分详情。
findings[].confidence 对象 包含置信度级别和理由。
findings[].taxonomy 对象 包含漏洞类别和 CWE 标识符。
findings[].locations 数组 列出受影响的文件、行号和位置角色。
findings[].remediation 字符串 描述建议的修复措施。
findings[].provenance 对象 标识发现的来源。

例如,以下命令会为每项发现输出一行以制表符分隔的数据:

jq -r '
  .findings[] |
  [.findingId, .severity.level, .confidence.level, .locations[0].path, .locations[0].startLine, .title] |
  @tsv
' findings.json

这些示例假定使用受信任的 Linux 运行器,其中装有 Node.js 和 npm、Git、Python 3、jq 以及提供商的命令行工具。npm 全局软件包前缀 必须可写。

请选择与你的 CI 提供商对应的示例。扫描结果可能包含敏感的漏洞详情。请将工件设为私有,并且只有在审查受众、内容和所需批准后才能发布发现。

name: Codex Security review

on:
  pull_request:

jobs:
  security-review:
    if: github.event.pull_request.head.repo.full_name == github.repository
    runs-on: ubuntu-latest
    permissions:
      contents: read
    steps:
      - uses: actions/checkout@v5
        with:
          ref: ${{ github.event.pull_request.head.sha }}
          fetch-depth: 0
          persist-credentials: false

      - name: Install Codex Security
        env:
          CODEX_HOME: ${{ runner.temp }}/codex-home
        run: |
          npm install --global @openai/codex
          codex plugin add codex-security@openai-curated

      - name: Review code changes
        env:
          CODEX_SECURITY_API_KEY: ${{ secrets.CODEX_SECURITY_API_KEY }}
          CODEX_HOME: ${{ runner.temp }}/codex-home
          TMPDIR: ${{ runner.temp }}/codex-security
          BASE_SHA: ${{ github.event.pull_request.base.sha }}
          HEAD_REVISION: ${{ github.event.pull_request.head.sha }}
        run: |
          BASE_REVISION="$(git merge-base "$BASE_SHA" "$HEAD_REVISION")"
          CODEX_API_KEY="$CODEX_SECURITY_API_KEY" codex exec \
            --sandbox workspace-write \
            "Use \$codex-security:security-diff-scan to review changes from $BASE_REVISION to $HEAD_REVISION for security regressions. Do not modify the checkout."

      - uses: actions/upload-artifact@v4
        if: always()
        with:
          name: codex-security-review
          path: ${{ runner.temp }}/codex-security/codex-security-scans

这些示例会跳过来自复刻仓库的拉取请求。只有使用受保护的 流水线定义,并且贡献者可信、可以接触扫描 凭据时,才运行需要凭据的作业。归档 codex-security-scans,将结构化发现、 清单、覆盖范围和 report.md 保存在一起,并同时保留所有按要求生成的 findings/ 或 hardening/ 输出。先从建议性结果开始,并在将该作业 设为必需检查前审查覆盖范围和运行时间。

有关 API key 处理和沙箱控制的信息,请参阅非交互 模式。如果你的组织允许使用 Codex GitHub Action,它可以在运行时安装 CLI,但你 仍须先安装插件,并将该 Action 的 codex-home 输入指向 同一个 CODEX_HOME。