Kod değişikliklerini güvenlik açısından inceleme
Pull request'leri ve yerel değişiklikleri güvenlik gerilemeleri açısından manuel olarak veya CI/CD içinde inceleyin.
Git tarafından izlenen tek bir değişiklik kümesindeki gerilemeleri bulmak için güvenlik değişikliği incelemesi çalıştırın. Codex, değiştirilen kaynak benzeri her dosyayı ve onu doğrudan destekleyen kodu inceler. İncelemeyi tam bir depo denetimine genişletmez.
Belirli bir değişiklik yerine deponun tamamını taramak için Güvenlik taraması çalıştırın bölümüne bakın.
Manuel inceleme çalıştırma
Masaüstü uygulamasında Security bölümünü açın, Scans öğesini ve ardından + Scan öğesini seçin. Depoyu seçtikten sonra Changes öğesini seçin. Commit edilmemiş değişiklikleri, tek bir commit'i veya bir temel ve uç revizyonu inceleyin. Deep scan, değişiklik taramalarında kullanılamaz.
Bir konuşmada Codex'ten commit edilmemiş değişiklikleri incelemesini de isteyebilirsiniz:
Use $codex-security:security-diff-scan to review my current uncommitted changes for security regressions.Bir commit veya dal aralığı için gerektiğinde her iki revizyonu da belirtin:
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.Temel ve uç revizyonları yerel checkout'ta mevcutsa bir pull request'in adını da belirtebilirsiniz.
Kurulumdaki değişikliği doğrulama
- Changes öğesini seçin.
- Checkout yapılmış depoyu, geçerli dalı ve en son commit'i doğrulayın.
- Changes to review altında şunlardan birini seçin:
- Geçerli çalışma ağacı için
Uncommitted changes. - Tek commit'lik inceleme için en son commit.
- Bir dal veya pull request aralığı için temel ve uç revizyon.
- Geçerli çalışma ağacı için
- Özetin incelemek istediğiniz değişikliği açıkladığını doğrulayın.
- Start scan öğesini seçin.
Codex başka bir dala geçmez veya seçili worktree'yi değiştirmez. İstenen revizyon yerel olarak mevcut değilse incelemeden önce onu getirin veya yerel olarak mevcut bir taban ve uç revizyon sağlayın.
Bulgularla ilgili işlem yapma
Sonuçları inceledikten sonra kabul edilmiş bir bulguyu düzeltin ve doğrulayın veya bulguları dışa aktarın ve takip edin.
CI/CD içinde incelemeleri otomatikleştirme
Bağımsız CLI ile yapılandırılmış JSON, önem derecesi politikası ve SARIF
yüklemesi için Codex Security'yi CI'da
çalıştırın bölümüne bakın. Yüklü eklenti becerisini
codex exec aracılığıyla çağırmak için bu bölümle devam edin.
Çalıştırıcı, Codex CLI'ı etkileşim gerektirmeden çağırabiliyorsa
CI'da $codex-security:security-diff-scan çalıştırın. Önce, tarama kimlik bilgisini açığa çıkarmadan CLI'ı
yükleyin:
npm install --global @openai/codexCodex Security eklentisini CLI'a kurun:
codex plugin add codex-security@openai-curatedYükleme komutu, herkese açık Codex CLI eklenti pazarını kullanır. Sürüme özgü gereksinimler için eklenti değişiklik günlüğüne bakın.
Ardından, CI gizli bilgi deponuzdaki bir OpenAI API key değerini
CODEX_SECURITY_API_KEY olarak sağlayın. Kimlik bilgisini yalnızca tarama için erişime açın:
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."Yazılabilir korumalı alan, taramanın geçici çıktılar oluşturmasını sağlar. Prompt, Codex'in kaynak kodun çalışma kopyasını değiştirmemesini yine de şart koşar.
Tarama, çıktısını
$TMPDIR/codex-security-scans/<repository>/<scan-id>/ konumuna yazar:
| Dosya | İçindekiler |
|---|---|
report.md |
Tarama dizininin tamamına erişmek için okunabilir ana giriş noktası. |
findings/<slug>/ |
İstendiğinde ayrıntılı güvenlik açığı raporları ve destekleyici kavram kanıtı dosyaları. |
hardening/ |
İstendiğinde yapısal sağlamlaştırma rehberi ve destekleyici öneriler. |
findings.json |
Sabit tanımlayıcılar, önem derecesi, güven düzeyi, kaynak konumları ve düzeltme bilgileri içeren bulgular. Bu alanları güvenlik iş akışlarında veya sonraki araçlarda kullanın. |
scan-manifest.json |
İncelenen hedefi, revizyonları ve çıktı karmalarını içeren mühürlenmiş tarama kaydı. |
coverage.json |
İncelenen ve ertelenen yüzeyler, kapsam dışı bırakılanlar ve kapsamın eksiksizliği. |
Alan tanımları için bulgu şemasına bakın. Bulguyu tanımlamak için findingId, bu taramadaki örneğini belirtmek için
occurrenceId kullanın.
Örneğin bu komut, her bulgu için sekmeyle ayrılmış bir satır yazdırır:
jq -r '
.findings[] |
[.findingId, .severity.level, .confidence.level, .locations[0].path, .locations[0].startLine, .title] |
@tsv
' findings.jsonBu örnekler; Node.js ve npm, Git, Python
3, jq ve sağlayıcının komut satırı araçlarının bulunduğu güvenilir bir Linux çalıştırıcısı varsayar. npm genel paket öneki
yazılabilir olmalıdır.
Tarama sonuçları hassas güvenlik açığı ayrıntıları içerebilir. Çıktı dosyalarını özel tutun ve bulguları yayımlamadan önce hedefi ve içeriği inceleyin. CI sağlayıcınıza uygun örneği seçin:
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 Maskelenmiş bir CODEX_SECURITY_API_KEY CI/CD değişkeni oluşturun ve bulguları paylaşmadan
önce tarama yapıtlarını gizli olarak inceleyin.
codex-security-review:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_SOURCE_PROJECT_ID == $CI_PROJECT_ID'
variables:
GIT_DEPTH: "0"
script:
- |
codex_security_api_key="$CODEX_SECURITY_API_KEY"
unset CODEX_SECURITY_API_KEY
export CODEX_HOME="/tmp/codex-home-$CI_JOB_ID"
export TMPDIR="/tmp/codex-security-$CI_JOB_ID"
export BASE_REVISION="$CI_MERGE_REQUEST_DIFF_BASE_SHA"
export HEAD_REVISION="${CI_MERGE_REQUEST_SOURCE_BRANCH_SHA:-$CI_COMMIT_SHA}"
npm install --global @openai/codex
codex plugin add codex-security@openai-curated
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."
after_script:
- |
unset CODEX_SECURITY_API_KEY
scan_root="/tmp/codex-security-$CI_JOB_ID/codex-security-scans"
if [ -d "$scan_root" ]; then
tar -czf codex-security-artifacts.tar.gz -C "$scan_root" .
fi
artifacts:
when: always
paths:
- codex-security-artifacts.tar.gz trigger: none
pool:
vmImage: ubuntu-latest
steps:
- checkout: self
fetchDepth: 0
- bash: |
set -euo pipefail
export CODEX_HOME="$AGENT_TEMPDIRECTORY/codex-home"
npm install --global @openai/codex
codex plugin add codex-security@openai-curated
displayName: Install Codex Security
- bash: |
set -euo pipefail
export CODEX_HOME="$AGENT_TEMPDIRECTORY/codex-home"
export TMPDIR="$AGENT_TEMPDIRECTORY/codex-security"
export HEAD_REVISION="$SYSTEM_PULLREQUEST_SOURCECOMMITID"
export BASE_REVISION="$(git merge-base HEAD^1 "$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."
displayName: Review code changes
condition: and(succeeded(), ne(variables['System.PullRequest.IsFork'], 'True'))
env:
CODEX_SECURITY_API_KEY: $(CODEX_SECURITY_API_KEY)
- publish: $(Agent.TempDirectory)/codex-security/codex-security-scans
artifact: codex-security-review
condition: always()Azure Repos için pipeline'ı pull request'lerde çalıştıracak bir Build validation dal ilkesi yapılandırın.
pipeline {
agent { label 'linux' }
stages {
stage('Codex Security review') {
when {
allOf {
changeRequest()
expression { !env.CHANGE_FORK?.trim() }
}
}
steps {
sh '''#!/usr/bin/env bash
set -euo pipefail
export CODEX_HOME="/tmp/codex-home-$BUILD_TAG"
export TMPDIR="/tmp/codex-security-$BUILD_TAG"
mkdir -p "$TMPDIR"
git fetch --no-tags origin "$CHANGE_TARGET"
target="$(git rev-parse FETCH_HEAD)"
git fetch --no-tags origin "$CHANGE_BRANCH"
git rev-parse FETCH_HEAD > "$TMPDIR/head"
git merge-base "$target" "$(cat "$TMPDIR/head")" > "$TMPDIR/base"
npm install --global @openai/codex
codex plugin add codex-security@openai-curated
'''
withCredentials([string(credentialsId: 'codex-security-api-key', variable: 'CODEX_SECURITY_API_KEY')]) {
sh '''#!/usr/bin/env bash
set +x
set -euo pipefail
export CODEX_HOME="/tmp/codex-home-$BUILD_TAG"
export TMPDIR="/tmp/codex-security-$BUILD_TAG"
export HEAD_REVISION="$(cat "$TMPDIR/head")"
export BASE_REVISION="$(cat "$TMPDIR/base")"
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."
'''
}
}
post {
always {
sh '''#!/usr/bin/env bash
set -euo pipefail
scan_root="/tmp/codex-security-$BUILD_TAG/codex-security-scans"
if [ -d "$scan_root" ]; then
tar -czf codex-security-artifacts.tar.gz -C "$scan_root" .
fi
'''
archiveArtifacts artifacts: 'codex-security-artifacts.tar.gz', allowEmptyArchive: true
}
}
}
}
} Örnekler, çatallanmış pull request'leri atlar. Kimlik bilgisi gerektiren işleri yalnızca
korumalı bir işlem hattı tanımından ve yalnızca tarama kimlik bilgisine erişmesine
güvenilen katkıda bulunanlar için çalıştırın. Yapılandırılmış bulguları, manifesti,
kapsamı ve report.md öğesini, talep edilen tüm findings/ veya
hardening/ çıktılarıyla birlikte tutmak için codex-security-scans öğesini arşivleyin.
Önce tavsiye niteliğindeki sonuçlarla başlayın; işi zorunlu bir denetim hâline
getirmeden önce kapsamı ve çalışma süresini inceleyin.
API key kullanımı ve korumalı alan denetimleri için Etkileşimsiz
mod bölümüne bakın. Kuruluşunuz Codex
GitHub Action kullanımına izin veriyorsa CLI'ı çalışma zamanında kurabilir; ancak
yine de önce eklentiyi kurmalı ve eylemin codex-home girdisini
aynı CODEX_HOME öğesine yönlendirmelisiniz.