Cara Alih Keluar "Kod Tersembunyi" daripada ChatGPT dan LLM lain

CometAPI
AnnaDec 2, 2025
Cara Alih Keluar "Kod Tersembunyi" daripada ChatGPT dan LLM lain

Memandangkan model bahasa besar (LLM) semakin menjana kod kerja dan disepadukan ke dalam saluran paip pembangunan dan susunan ejen, terdapat peningkatan risiko yang tersembunyi or berniat jahat arahan — sama ada dibenamkan dalam output model, disuntik melalui halaman web atau pemalam pihak ketiga, atau diperkenalkan semasa latihan model — boleh menyebabkan tingkah laku tidak selamat apabila kod tersebut dilaksanakan.

Menurut laporan pengguna yang beredar dalam komuniti pembangun, pembangun perisian mengalami kehilangan data yang besar — ​​kira-kira 800GB fail telah dipadamkan, Termasuk keseluruhan aplikasi CursorAI itu sendiri — selepas melaksanakan kod yang dijana dengan bantuan daripada gemini 3 semasa bekerja di dalam CursorAI IDE. Memandangkan pembangun semakin bergantung pada LLM untuk penjanaan kod, akibat daripada skrip yang tidak disemak atau tidak selamat menjadi lebih teruk.

Oleh itu, adalah agak penting untuk mengetahui cara untuk mengesan dan mengalih keluar kod berbahaya yang dijana oleh LLM.

Apakah "kod tersembunyi" dalam konteks ChatGPT dan LLM?

Apakah yang orang maksudkan dengan "kod tersembunyi"?

"Kod tersembunyi" ialah istilah umum yang digunakan pembangun untuk menerangkan sebarang arahan terbenam atau kandungan boleh laku dalam teks (atau fail) yang LLM termakan atau dipancarkan, termasuk:

  • Arahan gaya segera dibenamkan di dalam kandungan pengguna (cth, “Abaikan arahan awal…” tersembunyi dalam PDF).
  • Watak yang tidak kelihatan atau ruang lebar sifar yang digunakan untuk menyembunyikan token atau memecahkan andaian tokenisasi.
  • Muatan berkod (base64, berkod URL, benam steganografi di dalam imej atau dokumen).
  • HTML/JS Tersembunyi atau blok skrip yang disertakan dalam kandungan berformat yang mungkin ditafsirkan oleh pemapar hiliran.
  • Metadata atau anotasi (komen fail, lapisan tersembunyi dalam PDF) yang mengarahkan sistem perolehan semula atau model.
  • Tingkah laku yang tersirat timbul daripada kod yang dijana yang menggunakan API berbahaya (cth, eval, exec, subprocess, atau panggilan rangkaian/sistem) — walaupun apabila niat itu tidak berniat jahat secara jelas.
  • Arahan yang disuntik segera yang menyebabkan model menjana kod yang termasuk arahan tersembunyi atau logik seperti pintu belakang kerana penyerang merekayasa gesaan atau konteks.

Vektor serangan ini sering dipanggil suntikan segera or suntikan segera tidak langsung apabila matlamatnya adalah untuk mengubah tingkah laku model. Komuniti keselamatan kini menganggap suntikan segera sebagai kelemahan teras LLM dan OWASP telah memformalkannya sebagai kategori risiko LLM.

Bagaimanakah ini berbeza daripada perisian hasad biasa atau XSS?

Perbezaannya ialah semantik lapisan: suntikan segera menyasarkan tingkah laku mengikut arahan model dan bukannya OS hos atau enjin pemaparan penyemak imbas. Yang berkata, HTML atau skrip tersembunyi yang akhirnya dijalankan dalam pemapar web masih merupakan serangan boleh laku (seperti XSS); kedua-dua lapisan semantik dan pelaksanaan mesti dipertahankan. Pemimpin industri dan penyelidik telah menggelar suntikan segera sebagai "cabaran keselamatan sempadan" dan terus menerbitkan strategi mitigasi.

Mengapa LLM boleh menghasilkan kod tersembunyi atau berbahaya?

Tingkah laku model, data latihan dan konteks arahan

LLM dilatih untuk menghasilkan kesinambungan yang munasabah berdasarkan konteks dan arahan. Jika konteks mengandungi isyarat lawan, atau jika pengguna meminta model untuk kod yang melaksanakan tindakan berkuasa, model boleh mengeluarkan kod yang termasuk gelagat halus atau aktif.

LLM menghasilkan kod yang munasabah tetapi tidak selamat

LLM dioptimumkan untuk kelancaran dan kegunaan, bukan untuk keselamatan sekiranya terdapat kesan sampingan yang merosakkan. Mereka dengan senang hati akan menjana ringkasan rm -rf /path/to/dir or shutil.rmtree() panggilan apabila diminta untuk "membersihkan" — dan kerana respons mereka sering diungkapkan dengan yakin, pengguna mungkin menyalin dan menjalankan dengan penelitian yang tidak mencukupi. Masalah "halusinasi yakin" ini adalah mengapa permintaan yang kelihatan tidak berbahaya menjadi berbahaya.

Automasi aliran kerja pengeliruan

Pelakon ancaman kini mengautomasikan kekaburan kod dengan merantai panggilan LLM: satu model menjana muatan, satu lagi mengolahnya semula untuk mengelakkan pengesanan tandatangan, dan sebagainya. Laporan ancaman industri dan analisis vendor pada tahun 2025 mendokumentasikan "pengeliruan berbantukan AI" ini sebagai teknik baru muncul.

Bagaimanakah anda boleh mengesan kod tersembunyi di dalam output model?

Senarai semak triage pantas

  1. Imbas untuk Unicode yang tidak kelihatan/luar biasa (penyambung lebar sifar, ruang lebar sifar, tanda susunan bait, homoglyph bukan ASCII).
  2. Jalankan analisis statik / penghuraian AST untuk mengenal pasti penggunaan API berkuasa (eval, exec, subprocess, os.system, panggilan reflektif).
  3. Cari muatan yang dikodkan (base64, gumpalan heks, rentetan panjang berulang atau kandungan dimampatkan).
  4. Periksa corak kekeliruan (penggabungan rentetan yang membina nama API, aritmetik aksara, chr() rantai).
  5. Gunakan analisis semantik untuk mengesahkan sama ada kod itu benar-benar melakukan mutasi I/O, rangkaian atau sistem fail.

Pengesanan corak statik (pantas, baris pertama)

  • Penghuraian dan linting yang sedar bahasa. Menghuraikan output yang dijana dengan serta-merta ke dalam blok kod lwn. prosa. Jalankan pemformat dan linter (Hitam/Lebih cantik, pylint, eslint). Peraturan lin harus bendera penggunaan eval, exec, rm -rf, panggilan subproses mentah atau paip shell yang membina arahan secara dinamik.
  • Pengimbas corak token dan rentetan. Cari token dan corak berisiko tinggi: sudo, laluan mutlak seperti /home/, C:\, rm -rf, shutil.rmtree, subprocess.Popen, gumpalan base64 sebaris, rentetan panjang yang tidak boleh ditafsirkan dan shebang yang menukar konteks penterjemah.
  • Pengimbasan rahsia & semakan asal. Kesan bukti kelayakan berkod keras, URL yang menunjuk pada pendaftaran yang tidak dipercayai atau kod yang menarik pakej secara dinamik daripada sumber sewenang-wenangnya.

Analisis statik menangkap banyak isu yang jelas dengan cepat dan murah untuk dijalankan sebagai sebahagian daripada gerbang CI.

Pengesanan semantik dan kontekstual (lebih mendalam)

  • Analisis niat. Gunakan model kedua atau enjin peraturan untuk mengklasifikasikan niat kod yang dijana: adakah ia "baca," "tulis," "padam," "rangkaian," "pasang"? Apa-apa sahaja yang dikategorikan sebagai padam/tulis harus mencetuskan peningkatan.
  • Analisis aliran data. Analisis kod untuk mengesan sama ada laluan yang tidak sah atau yang dibekalkan pengguna boleh mencapai API yang merosakkan. Sebagai contoh, jika pembolehubah yang diperoleh daripada output LLM atau fail jauh kemudiannya digabungkan ke dalam perintah shell, tandakan ia.
  • Korelasi asal usul. Simpan rekod penuh perbualan, gesaan sistem dan halaman konteks. Jika output yang mencurigakan berkait dengan dokumen luaran atau panggilan pemalam tertentu, itu boleh menunjukkan suntikan segera atau konteks yang tercemar.

Pengesanan dinamik dan tingkah laku (paling dipercayai)

  • Pelaksanaan kotak pasir dengan pemantauan. Laksanakan kod yang dijana dalam persekitaran fana yang dihadkan dengan ketat tanpa rangkaian, tiada lekapan hos dan penapisan syscall (seccomp). Pantau aktiviti sistem fail, percubaan panggilan rangkaian, pemijahan proses dan I/O yang luar biasa.
  • Ujian kanari. Sebelum berjalan pada data sebenar, jalankan kod terhadap direktori sintetik yang mengandungi fail sentinel; pantau untuk pemadaman atau tulis ganti.
  • Heuristik tingkah laku. Cari gelung yang merentasi direktori induk, operasi rekursif tanpa semakan kedalaman, atau menamakan semula corak yang boleh mencederakan banyak fail (cth, berulang kali menulis nama fail yang sama).
    Analisis dinamik ialah satu-satunya cara untuk mengesan muatan yang dikelirukan, ditangguhkan atau dicetuskan hanya pada masa jalan.

Bagaimanakah anda harus mengalih keluar atau meneutralkan kod tersembunyi sebelum melaksanakan output LLM?

Penyingkiran defensif lwn. mengubah semantik

Terdapat dua matlamat apabila "mengalih keluar kod tersembunyi":

  1. Sanitasi — alih keluar kandungan yang jelas bukan kod atau mencurigakan (Unikod halimunan, aksara lebar sifar, muatan base64 yang ditambahkan). Ini tidak seharusnya mengubah logik yang dimaksudkan dan jinak.
  2. Peneutralan — untuk apa-apa sahaja yang melaksanakan atau memanggil perkhidmatan luaran, lumpuhkan panggilan tersebut atau jadikannya no-op sehingga disahkan.

Sentiasa lebih suka peneutralan + semakan pemadaman buta: mengalih keluar bahagian kod secara sewenang-wenangnya boleh menghasilkan tingkah laku yang rosak atau tidak dijangka. Sebaliknya, gantikan binaan yang mencurigakan dengan rintisan log yang jelas dan gagal dengan selamat (tingkatkan pengecualian atau kembalikan lalai selamat).

Langkah 1 — Anggap kod yang dijana sebagai data yang tidak dipercayai

Jangan sekali-kali melaksanakan kod terus daripada ChatGPT (atau mana-mana LLM) tanpa menghantarnya melalui saluran paip penyingkiran dan pengerasan. Saluran paip itu harus dikuatkuasakan oleh dasar dan diautomatikkan dalam CI/CD.

Langkah 2 — Ekstrak dan kanonikkan kod

  • Normalkan teks dan alih keluar aksara lebar sifar: Strip aksara seperti U+200B, U+200C, U+200D, U+FEFF dan titik kod lebar sifar / pemformatan yang lain. Log perkara yang telah dialih keluar untuk pengauditan. Langkah ini menghapuskan banyak pengekodan "tersembunyi" yang digunakan untuk siluman visual.
  • Keluarkan semua konteks bukan kod: alih keluar naratif, komen tersembunyi dan sebarang pembalut HTML/Markdown. Tukar kod kepada bentuk kanonik menggunakan pemformat bahasa (Hitam, Lebih Cantik) supaya ruang putih atau aksara kawalan yang dikelirukan dinormalkan.
  • Tolak atau kuarantin kod dengan binaan ini: dinamik eval, panggilan subproses mentah (os.system, subprocess.Popen), gumpalan base64 sebaris dinyahkodkan kepada pelaksanaan atau dibenamkan #! arahan yang cuba mengalihkan konteks penterjemah. Normalkan teks dan alih keluar aksara lebar sifar
    Jalur aksara seperti U+200B, U+200C, U+200D, U+FEFF dan titik kod lebar sifar / pemformatan yang lain. Log perkara yang telah dialih keluar untuk pengauditan. Langkah ini menghapuskan banyak pengekodan "tersembunyi" yang digunakan untuk siluman visual.

Langkah 3 — Parsing ke dalam AST dan gantikan nod berisiko

Dengan kod yang dihuraikan ke dalam AST, cari nod yang memanggil pelaksanaan dinamik (cth, exec), atau yang membina nama fungsi secara pemrograman. Gantikannya dengan stub selamat yang menimbulkan pengecualian terkawal yang menunjukkan "tingkah laku dinamik tidak selamat disekat". Hasilkan salinan bersih dari sumber yang disokong AST untuk semakan. Jalankan semakan corak keselamatan (peraturan semgrep tersuai untuk persekitaran anda). Di mana padanan ditemui, tandai dan neutralkannya.

Langkah 4 — Pengerasan statik & penulisan semula

  • Penulisan semula automatik: lulus kod melalui sanitizer automatik yang menggantikan panggilan berbahaya dengan pembalut selamat — cth, ganti os.system() / subprocess dengan pelaksana kotak pasir yang diluluskan yang menguatkuasakan tamat masa dan blok rangkaian.
  • Gating keupayaan: mengubah suai atau mengalih keluar kunci API, token atau panggilan ke titik akhir istimewa; gantikannya dengan penyesuai olok-olok untuk ujian tempatan. Elakkan kemasukan rahsia atau URL secara tidak sengaja.
  • Ketergantungan menulis semula: dinamik blok pip / npm pemasangan yang dibuat oleh kod. Memerlukan tanggungan untuk diisytiharkan dan diluluskan melalui pendaftaran anda.

Langkah 5 — Berlari di dalam kotak pasir yang agresif

  • Bekas ephemeral / mikroVM: laksanakan kod dalam bekas/VM yang tidak mempunyai rangkaian, tiada akses kepada bukti kelayakan hos dan akses sistem fail terhad. Teknologi seperti gVisor, Mercun atau perkhidmatan pelaksanaan sementara yang berdedikasi adalah sesuai. Jika kod mesti mengakses I/O, gunakan proksi yang menguatkuasakan dasar.
  • Penapis panggilan sistem & seccom: hadkan syscall mana yang dibenarkan. Tulisan fail di luar direktori temp harus disekat.
  • Had sumber/masa: tetapkan had CPU/memori/masa supaya bom logik pun tidak boleh berjalan selama-lamanya.

Pelaksanaan kotak pasir serta pemantauan sering mendedahkan muatan yang terlepas daripada pemeriksaan statik. Panduan industri dan kertas putih terkini mengesyorkan kotak pasir sebagai mitigasi teras.

Apakah alatan dan peraturan automatik yang perlu ada dalam perancangan anda?

Komponen rantai alat yang disyorkan

  • Modul sanitasi Unicode (perpustakaan tersuai atau sedia ada). Mesti log aksara biasa.
  • Penghurai + penganalisis AST untuk setiap bahasa sasaran (Python ast, typed-ast, penghurai JavaScript, penghurai Java).
  • Penganalisis statik / SAST: Bandit (Python), Semgrep (multi-lang, boleh disesuaikan), ESLint dengan pemalam keselamatan.
  • Heuristik entropi dan penyahkod: mengesan base64/hex/gzip dan laluan ke pemeriksaan.
  • Masa jalan kotak pasir: bekas minimum dengan profil seccomp/AppArmor yang ketat atau penterjemah peringkat bahasa dengan syscalls yang dilumpuhkan.
  • Penguatkuasa dasar: komponen yang menentukan modul yang dibenarkan, titik akhir yang dibenarkan dan pembalut API yang selamat.
  • Jejak audit: log tidak berubah yang merekodkan keluaran asal, keluaran bersih, perbezaan dan keputusan.

Contoh corak semgrep (konseptual)

Gunakan peraturan ringkas dan konservatif yang menandakan penggunaan fungsi berbahaya. Contohnya:

  • Bendera eval, exec, Function pembina (JS), import dinamik atau nama API binaan rentetan.
  • Benderakan panggilan rangkaian di luar senarai dibenarkan (cth, requests.get kepada hos yang tidak diketahui).
  • Bendera menulis ke laluan sensitif (/etc, folder sistem) atau pemijahan proses.

(Simpan ini sebagai item konfigurasi bagi setiap organisasi dan ketatkannya dari semasa ke semasa.)

Apakah coretan sanitasi praktikal (contoh selamat)?

Di bawah ialah contoh pertahanan yang tidak berbahaya yang boleh anda sesuaikan. Mereka adalah sanitasi dan pengesanan coretan — bukan mengeksploitasi arahan.

Contoh: jalur aksara lebar sifar (Python, defensif)

import re
ZERO_WIDTH_RE = re.compile(r'')
def strip_zero_width(s: str) -> str:
    cleaned = ZERO_WIDTH_RE.sub('', s)
    return cleaned

Ini mengalih keluar aksara yang sering digunakan oleh penyerang untuk menyembunyikan kod dalam teks yang boleh dilihat. Sentiasa catatkan apa yang telah dialih keluar dan layan pengalihan keluar sebagai sebahagian daripada jejak audit.

Contoh: menghuraikan dan memeriksa AST (Python, konseptual)

import ast

def has_dynamic_exec(source: str) -> bool:
    tree = ast.parse(source)
    for node in ast.walk(tree):
        if isinstance(node, ast.Call):
            if getattr(node.func, 'id', '') in ('eval', 'exec',):
                return True
        if isinstance(node, ast.Attribute):
            if getattr(node, 'attr', '') in ('popen', 'system'):
                return True
    return False

If has_dynamic_exec mengembalikan Benar, jangan jalankan kod; sebaliknya gantikan nod dinamik dengan stub selamat dan memerlukan semakan.

Nota: contoh ini bersifat defensif. Jangan alih keluar pembalakan, pengauditan atau semakan manusia daripada saluran paip anda.

Fikiran penutup: perlakukan output LLM seperti kod yang tidak dipercayai, sentiasa

LM ialah alat produktiviti yang berkuasa — ia boleh menghasilkan kod yang elegan, mempercepatkan draf dan mengautomasikan kerja rutin. Tetapi apabila mereka menemui pelaksanaan, peraturan keselamatan berubah: output model mesti dianggap sebagai artifak yang tidak dipercayai. Gabungan suntikan segera, penyelidikan pintu belakang dan pendedahan kelemahan dunia sebenar sepanjang 18–30 bulan yang lalu menunjukkan titik yang jelas: permukaan risiko telah berkembang dan akan terus berkembang.

Pertahanan praktikal yang menggabungkan penghuraian, analisis statik, ujian dinamik kotak pasir, tadbir urus dan gabungan merah berterusan akan menghentikan kebanyakan serangan. Tetapi pasukan juga mesti melabur dalam kawalan organisasi: keistimewaan paling rendah, asal dan budaya yang menganggap output LLM memerlukan pengesahan. Industri sedang membina alat dan rangka kerja untuk menjadikan corak ini lebih mudah; Sementara itu, menggunakan senarai semak di atas mengurangkan kemungkinan muatan tersembunyi tergelincir.

Pembangun boleh mengakses API LLM terkini seperti API Claude Sonnet 4.5 and Pratonton Gemini 3 Pro dan lain-lain melalui CometAPI, versi model terkini sentiasa dikemas kini dengan laman web rasmi. Untuk memulakan, terokai keupayaan model dalam Taman Permainan dan berunding dengan Panduan API untuk arahan terperinci. Sebelum mengakses, sila pastikan anda telah log masuk ke CometAPI dan memperoleh kunci API. CometAPI menawarkan harga yang jauh lebih rendah daripada harga rasmi untuk membantu anda menyepadukan.

Bersedia untuk Pergi?→ Daftar untuk CometAPI hari ini !

Jika anda ingin mengetahui lebih banyak petua, panduan dan berita tentang AI, ikuti kami VKX and Perpecahan!

SHARE THIS BLOG

500+ Model dalam Satu API

Sehingga 20% Diskaun