Apa itu Injection?
Injection terjadi ketika data yang tidak dipercaya — input dari pengguna, parameter URL, header HTTP, atau data dari sumber eksternal — dikirimkan ke interpreter (database, sistem operasi, LDAP server, template engine) sebagai bagian dari perintah atau query, tanpa validasi atau pemisahan yang memadai.
Hasilnya: interpreter tidak dapat membedakan antara perintah yang sah dan data yang dimasukkan penyerang. Data tersebut dieksekusi sebagai perintah — memberikan penyerang kemampuan untuk membaca, memodifikasi, atau menghapus data; mengeksekusi perintah sistem operasi; atau mengambil alih seluruh aplikasi.
Dalam bahasa bisnis: ini adalah kondisi di mana penyerang dapat memerintah sistem Anda hanya dengan memasukkan teks tertentu ke dalam form input, URL, atau header — karena sistem gagal membedakan instruksi dari data.
Mengapa Turun dari Posisi #1?
Selama hampir dua dekade (2003–2021), Injection — khususnya SQL Injection — mendominasi OWASP Top 10. Penurunannya ke posisi #3 di edisi 2025 bukan berarti ancaman ini berkurang — justru sebaliknya.
Penurunan posisi mencerminkan dua hal:
Framework modern (Django ORM, Hibernate, ActiveRecord) yang menggunakan parameterized queries secara default telah mengurangi prevalensi SQL Injection pada aplikasi baru yang dibangun dengan benar
Dua ancaman lain (Broken Access Control dan Security Misconfiguration) terbukti lebih universal — ditemukan pada lebih banyak aplikasi
Namun injection tetap sangat relevan karena:
Jutaan sistem legacy masih menggunakan query string concatenation yang rentan
Jenis injection baru terus berkembang seiring munculnya teknologi baru (NoSQL, template engines, LLM prompt injection)
Dampak eksploitasi yang berhasil tetap sangat tinggi — sering kali menghasilkan kompromi sistem penuh
Jenis-Jenis Utama Injection
1. SQL Injection (SQLi)
Penyisipan perintah SQL ke dalam query database melalui input pengguna. Jenis yang paling dikenal dan paling banyak dieksploitasi sepanjang sejarah keamanan aplikasi web.
Contoh sederhana:
Input normal: username = budi
Query: SELECT * FROM users WHERE username = 'budi'
Input berbahaya: username = ' OR '1'='1
Query: SELECT * FROM users WHERE username = '' OR '1'='1'
→ Mengembalikan semua pengguna
Variasi SQL Injection:

