EN: Read in English
Dunia C4: Perisai Pipeline
pull_request_target dan fork
Anda akan belajar: kenapa PR dari fork tak dapat secret, dan perangkap dalam pull_request_target.
Teks BM belum disemak oleh penutur asli.
Disemak dengan GitHub Actions 2026-10 pada 31 Okt 2026
Masalahnya
Orang asing fork (buat salinan) repo kedai anda dan buka PR. Job pratonton anda perlukan token Cloudflare anda. Patutkah kod mereka dapat token itu?
Pilih satu jawapan.
Cuba
Jalankan kedua-dua event. Cari yang mana pratonton berhenti.
Cuba event satu per satu. Cari yang diminta.
Fail workflow .github/workflows/preview.yml
name: Preview on: pull_request: permissions: contents: read jobs: preview: runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 - run: npm ci - run: npx wrangler deploy --env preview env: CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
Tali sawat
Pull request · feature → main
Petunjuk
Cuba pull request dari fork.Tengok
Sesetengah pasukan mahu pratonton untuk fork juga. Jadi mereka tukar ke pull_request_target: Pencetus PR yang jalan dengan secret dan kunci tulis anda, walaupun untuk fork orang asing. Jangan jalankan kod mereka di situ.. Ia jalan dengan secret anda dan kunci tulis, walaupun untuk fork. Susun dua pencetus ini.
Seret kad ke dalam kotak. Atau ketik kad, kemudian ketik kotak.
Teka
Pratonton ini tukar ke pull_request_target. Ia juga check out kod PR itu sendiri. PR fork orang asing sampai. Apa jadi?
Pilih satu jawapan.
Tengok
Pilih satu event. Tekan Run dan tengok tali sawat.
PR orang asing pada pull_request_target. Setiap stesen jadi hijau, dengan token anda dalam job.
Fail workflow .github/workflows/preview.yml
name: Preview on: pull_request_target: permissions: contents: read jobs: preview: runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 with: ref: ${{ github.event.pull_request.head.sha }} - run: npm ci - run: npx wrangler deploy --env preview env: CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
Tali sawat
Pull request dari fork · stranger:feature → main
Hijau! npm ci orang asing itu jalan dengan token anda dalam jangkauan. Satu skrip pemasangan yang licik boleh menyalinnya.
Cuba
Tekan dua baris yang jadikan workflow ini perangkap.
Tekan setiap baris yang berisiko. Setiap satu tunjuk serangan dan pembetulannya.
Fail workflow .github/workflows/welcome.yml
Petunjuk
Kod mana yang checkout ambil? Dan berapa kunci job itu dapat?Semak
Okey pada pull_request_target, atau perangkap? Leret setiap job.
Leret ke kanan untuk bagus, ke kiri untuk perlu baiki. Atau guna butang.
Tambah label pada PR fork, tanpa check out kodnya
Anda berjaya!
Kini anda boleh jauhkan PR orang asing daripada kunci anda.
Nak tahu lebih (pilihan)
Corak lebih selamat: uji kod fork dengan pull_request. Perlukan secret selepas itu? Guna workflow berasingan pada workflow_run, dan anggap artifaknya tak dipercayai. Penyumbang kali pertama mungkin perlu kelulusan penyelenggara untuk run mereka. Latihan sebenar: cari pull_request_target dalam repo anda dan semak setiap satu.
English
A stranger forks your shop repo and opens a PR. Your preview job needs your Cloudflare token. Should their code get it?
Run both events. Find the one where the preview stops.
Some teams want previews for forks too. So they switch to pull_request_target. It runs with your secrets and a write key, even for forks. Sort the two triggers.
This preview switches to pull_request_target. It also checks out the PR’s own code. A stranger’s fork PR arrives. What happens?
Green! The stranger’s npm ci ran with your token in reach. One sneaky install script could copy it.
Tap the two lines that turn this workflow into a trap.
Fine on pull_request_target, or a trap? Swipe each job.
You can now keep a stranger’s PR away from your keys.
Anda dah siapkan ini. Latihan lagi pun bagus!
Dokumentasi rasmi: Events: pull_request and pull_request_target · Secure use reference
Anda dah belajar 25 minit. Rehat sekejap bantu otak anda.
Pecutan selesai! Fokus yang hebat. Regangkan badan seminit?