EN: Read in English
Dunia C4: Perisai Pipeline
Suntikan skrip
Anda akan belajar: bagaimana tajuk orang asing boleh jadi arahan, dan pembaikan env:.
Teks BM belum disemak oleh penutur asli.
Disemak dengan GitHub Actions 2026-10 pada 31 Okt 2026
Masalahnya
Robot anda ucap terima kasih bila isu baharu dibuka:
- run: echo "Thanks for ${{ github.event.issue.title }}"Siapa yang tulis tajuk itu?
Pilih satu jawapan.
Tengok
Ketik setiap titik pada garis masa.
Tekan setiap langkah. Tajuk itu jadi kod. Slip pesanan dengan arahan tersembunyi: itulah script injection: Slip pesanan dengan arahan tersembunyi: teks orang asing jadi arahan dalam skrip run: anda. (suntikan skrip).
Teka
Pembaikannya: hantar tajuk melalui env: dulu. Bash kemudian nampak data biasa, bukan kod.
- run: echo "Thanks for $TITLE"
env:
TITLE: ${{ github.event.issue.title }}Tajuk licik yang sama. Apa bash cetak sekarang?
Pilih satu jawapan.
Cuba
Tekan setiap baris di mana teks orang asing jadi kod.
Tekan setiap baris yang berisiko. Setiap satu tunjuk serangan dan pembetulannya.
Fail workflow .github/workflows/greet.yml
Petunjuk
Lihat dalam barisrun:. Nombor selamat. Nama dan teks tidak.Cuba
Bina robot sambutan yang selamat. Hantar tajuk melalui env:.
Tekan blok untuk tambah. Susun ikut urutan.
Blok
Workflow anda
Tekan satu blok di atas untuk mula.
Fail workflow .github/workflows/
name: Welcome
Apa yang berjalan
Belum ada apa untuk dijalankan.
Semak
Selamat terus dalam run:, atau patut melalui env:? Leret setiap nilai.
Leret ke kanan untuk bagus, ke kiri untuk perlu baiki. Atau guna butang.
${{ github.event.issue.title }}Anda berjaya!
Kini anda boleh halang teks orang asing daripada jadi arahan.
Nak tahu lebih (pilihan)
Alat boleh tangkap ini untuk anda. actionlint beri amaran bahawa nilai “is potentially untrusted”. CodeQL juga ada semakan. Pembaikan lain: action JavaScript kecil yang terima nilai itu sebagai input. Latihan sebenar: cari github.event dalam baris run: workflow anda.
English
Your robot thanks everyone who opens an issue:
- run: echo "Thanks for ${{ github.event.issue.title }}"Who writes that title?
Tap through it. The title became code. An order slip with a hidden instruction: that is script injection.
The fix: pass the title through env: first. Bash then sees plain data, never code.
- run: echo "Thanks for $TITLE"
env:
TITLE: ${{ github.event.issue.title }}Same sneaky title. What does bash print now?
Tap every line where a stranger’s text becomes code.
run: lines. A number is safe. Names and text are not.Build the safe welcome robot. Pass the title through env:.
Safe straight inside run:, or should it go through env:? Swipe each value.
You can now stop a stranger’s text from turning into a command.
Anda dah siapkan ini. Latihan lagi pun bagus!
Dokumentasi rasmi: Script injections · Secure use: good practices against script injection
Anda dah belajar 25 minit. Rehat sekejap bantu otak anda.
Pecutan selesai! Fokus yang hebat. Regangkan badan seminit?