Pendahuluan
Security is a process, not a product.— Bruce Schneier
Setiap aplikasi yang menyambungkan Large Language Model (LLM) ke input pengguna membuka permukaan serangan baru: prompt itu sendiri. Buku ini bukan kajian teoretis — ini manual kerja untuk memasang lima lapisan pertahanan yang bisa kamu tempel ke aplikasi AI hari ini, dengan penguji interaktif untuk melihat tiap lapisan bekerja.
Angka-angkanya tidak main-main. Sejak OWASP menerbitkan Top 10 for LLM Applications, prompt injection menempati peringkat pertama — bukan karena paling canggih, melainkan karena paling mudah dilakukan dan paling sulit ditutup total. Berbeda dengan SQL injection yang bisa dimatikan dengan prepared statement, injeksi prompt menyerang inti cara kerja model: ketidakmampuannya membedakan instruksi tepercaya dari data tak-tepercaya. Tidak ada satu tambalan yang menyelesaikannya. Yang ada adalah disiplin berlapis.
Buku ini disusun sebagai perjalanan bertahap. Kamu akan mulai dari model ancaman (siapa lawanmu dan apa yang mereka incar), lalu memasang lima lapis pertahanan satu per satu — masing-masing dengan kode siap salin, contoh serangan nyata, dan batasannya yang jujur. Setelah kelima lapis terpasang, kita menyelam ke katalog 30 teknik serangan, membangun rangkaian uji red-team, mengeraskan agent dan pipeline RAG, lalu menutup dengan pemantauan dan respons insiden. Setiap bab dirancang agar bisa dibaca berdiri sendiri, tapi urutannya membentuk satu kurikulum utuh.
Loncat ke Uji Analisis Keamanan untuk merasakan pertahanannya dulu, baru baca lima bab lapisan untuk memahami cara kerjanya. Tiap bab punya prompt/kode siap salin. Demo di buku ini berjalan penuh di browser (tanpa server) — ia meniru logika gerbang, bukan memanggil model sungguhan.
Kenapa prompt perlu diperkeras
LLM tidak membedakan "instruksi yang kamu tulis sebagai pengembang" dari "teks yang diketik pengguna" — keduanya sama-sama token. Ketika pengguna menulis "Abaikan instruksi sebelumnya dan...", model secara alami cenderung menurut, karena melanjutkan teks adalah satu-satunya hal yang ia lakukan. Inilah prompt injection: kelas kerentanan nomor satu pada aplikasi LLM.
Konsekuensinya nyata: system prompt (dan rahasia di dalamnya) bocor, chatbot layanan pelanggan berubah jadi penulis malware, agent dengan akses tool dipakai mengeksfiltrasi data, atau bot brand-mu tiba-tiba mengeluarkan ujaran yang memalukan. Tidak ada satu tombol ajaib yang menutup semua ini — yang bekerja adalah pertahanan berlapis: kalau satu lapis tembus, lapis berikutnya menahan.
Model ancaman & 10 pola serangan
Lima lapis di buku ini dirancang untuk menahan sepuluh pola serangan yang paling sering muncul. Penguji interaktif mengenali kesepuluhnya:
| Pola | Tujuan penyerang | Ditahan di lapis |
|---|---|---|
| Override prompt | Membatalkan instruksi pengembang ("abaikan instruksi di atas") | L1, L5 |
| Ekstraksi peran | Memancing model menyebut system prompt-nya | L1, L5 |
| Jailbreak | Persona fiktif untuk melewati aturan | L1, L5 |
| Mode DAN | "Do Anything Now" — persona tanpa batas | L1 |
| System prompt leak | Meminta model mencetak ulang instruksinya | L1, L4, L5 |
| Code injection | Menyisipkan skrip untuk dijalankan di sisi lain | L1, L4 |
| Data exfiltration | Menarik data sensitif keluar lewat jawaban | L2, L4 |
| Identity manipulation | Mengaku admin/developer untuk naik hak akses | L1, L5 |
| JSON bypass | Merusak format terstruktur untuk lolos parser | L3 |
| Tool abuse | Memaksa agent memanggil tool berbahaya | L2, L4, L5 |
Arsitektur 5-lapis
Bayangkan permintaan pengguna melewati lima gerbang berurutan. Tiga lapis pertama menyaring input sebelum menyentuh model; dua lapis terakhir mengunci perilaku dan output. Sebuah permintaan hanya lolos bila melewati kelimanya.
Defense in depth: jangan pernah menaruh seluruh keamananmu pada satu titik kegagalan.— Doktrin keamanan berlapis
Tidak ada satu lapis pun yang sempurna. Deteksi pola bisa dielakkan dengan parafrase; batas konteks bisa ditipu; sanitasi bisa ketinggalan pola baru. Kekuatannya ada di penumpukan: peluang satu serangan menembus kelima lapis jauh lebih kecil daripada menembus satu.
Uji Analisis Keamanan
Ketik atau tempel sebuah query, lalu tekan Uji. Penguji menjalankan input melewati kelima lapis dan menunjukkan lapis mana yang menahannya (atau melewatkannya). Coba tombol pola terlindungi di bawah untuk melihat tiap jenis serangan tertangkap.
Prompt Guard · Konsol Uji
5 lapis aktifDemo ini menjalankan L1–L4 sepenuhnya di browser dengan aturan yang sama seperti yang kamu pasang di server. L3 (skema JSON) dan L5 (pengerasan peran) di sini disimulasikan sebagai keputusan lolos/tahan — di produksi keduanya dijalankan oleh validator skema dan konstruksi system prompt yang dijelaskan di bab masing-masing.
Deteksi Pola Injeksi
Lapis pertama adalah saringan cepat: sebelum input pengguna sampai ke model, cocokkan dengan daftar tanda tangan serangan yang diketahui. Ini murah, cepat, dan menahan mayoritas serangan naif.
All input is evil until proven otherwise.— Michael Howard, prinsip Writing Secure Code
Cara kerjanya
Kumpulkan pola regex dan frasa kunci untuk tiap kelas serangan. Normalkan input dulu (huruf kecil, rapikan spasi, buang karakter tak terlihat), lalu uji terhadap seluruh pola. Kalau cocok, tolak atau tandai untuk peninjauan sebelum pemanggilan model.
// L1 — Deteksi pola injeksi (contoh, TypeScript) const SIGNATURES: {tag: string; re: RegExp}[] = [ { tag: "override", re: /\b(abaikan|ignore|disregard|forget)\b.{0,30}\b(instruksi|instructions?|prompt|rules?|above|sebelum)/i }, { tag: "role_extract", re: /\b(system prompt|initial prompt|your instructions|repeat.{0,15}above|print.{0,15}prompt|reveal)/i }, { tag: "jailbreak", re: /\b(jailbreak|dev mode|developer mode|pretend you are|act as if|no restrictions|tanpa batasan)/i }, { tag: "dan", re: /\bDAN\b|do anything now|\bSTAN\b|\bAIM\b/i }, { tag: "identity", re: /\b(i am (the )?(admin|developer|owner|root)|saya admin|as an administrator|sudo)/i }, { tag: "code_inject", re: /
