0Pricing
Cyber Security Academy · Pelajaran

Pertahanan terhadap Injeksi SQL

Cegah serangan injeksi

Pertahanan terhadap Injeksi SQL adalah pelajaran Cyber Security Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Cyber Security Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Cyber Security Academy mencakup 4 pelajaran total.

Apa Itu Injeksi SQL

Injeksi SQL (SQLi) terjadi saat masukan pengguna yang tidak tepercaya digabungkan langsung ke dalam kueri SQL. Penyerang menyelundupkan sintaks SQL ke dalam kolom yang diharapkan aplikasi berisi data biasa, sehingga mengubah makna kueri.

Injeksi SQL tetap menjadi salah satu kerentanan web yang paling merusak karena dapat membocorkan seluruh basis data, melewati proses masuk, atau menghancurkan data.

Kueri yang Rentan

Kesalahan klasiknya adalah penggabungan teks. Jika masukannya adalah tom, kuerinya baik-baik saja, tetapi masukan yang dibuat khusus dapat menulis ulang logikanya.

  • Tanda petik tunggal menutup teks terlalu dini.
  • Semua setelahnya menjadi SQL yang dapat dieksekusi.
query = "SELECT * FROM users WHERE name = '" + userInput + "'";
// userInput = tom' OR '1'='1
// becomes: SELECT * FROM users WHERE name = 'tom' OR '1'='1'

Pelewatan Autentikasi

Formulir masuk merupakan sasaran utama. Dengan menyisipkan kondisi yang selalu benar dan menjadikan bagian lainnya sebagai komentar, penyerang dapat masuk tanpa kata sandi.

Urutan -- menjadikan klausa yang tersisa sebagai komentar sehingga pemeriksaan kata sandi diabaikan.

-- attacker enters in the username field:
admin' --
-- resulting query:
SELECT * FROM users WHERE user = 'admin' --' AND pass = '...'

Kueri Berparameter

Pertahanan utama adalah kueri berparameter (pernyataan siap pakai). Struktur SQL dikirim secara terpisah dari data, sehingga masukan selalu diperlakukan sebagai nilai, bukan kode.

Pengandar basis data mengikat penampung ? ke nilai yang diberikan dengan aman.

-- Python (sqlite3 / psycopg)
cur.execute(
  'SELECT * FROM users WHERE name = ? AND pass = ?',
  (username, password)
)

Pernyataan Siap Pakai dalam Java

Setiap bahasa pemrograman utama menyediakan parameterisasi. Dalam Java, gunakan PreparedStatement, bukan membuat teks dengan Statement.

Parameter yang terikat tidak dapat keluar dari tempatnya, sehingga injeksi secara struktural tidak mungkin terjadi di sini.

PreparedStatement ps = conn.prepareStatement(
  "SELECT * FROM users WHERE name = ?");
ps.setString(1, userInput);
ResultSet rs = ps.executeQuery();

Prosedur Tersimpan

Prosedur tersimpan dapat membantu jika menggunakan masukan berparameter secara internal. Namun, waspadalah: prosedur tersimpan yang membuat SQL dinamis melalui penggabungan teks sama rentannya.

  • Aman: parameter yang diteruskan ke prosedur.
  • Tidak aman: EXEC() atas teks yang digabungkan di dalam prosedur.

Validasi Masukan dan Daftar yang Diizinkan

Validasi merupakan lapisan kedua yang berguna. Gunakan daftar yang diizinkan (hanya menerima pola yang diketahui aman), bukan daftar blokir (berusaha melarang karakter berbahaya).

Contohnya, kolom ID numerik harus menolak apa pun yang bukan angka sebelum masukan tersebut mencapai kueri.

if not user_id.isdigit():
    raise ValueError('invalid id')
# only then use the value

Pelolosan sebagai Upaya Terakhir

Melakukan pelolosan tanda petik secara manual rapuh dan rentan kesalahan. Basis data yang berbeda memiliki aturan pelolosan yang berbeda, dan kasus tepi seperti trik pengodean serta injeksi tahap kedua dapat lolos.

Utamakan kueri berparameter. Gunakan pelolosan hanya jika ORM atau pengandar tidak dapat membuat parameter untuk pengenal tertentu.

Hak Istimewa Minimum untuk Akun Basis Data

Batasi dampak injeksi yang berhasil dengan menerapkan hak istimewa minimum pada pengguna basis data aplikasi.

  • Berikan hanya SELECT, INSERT, UPDATE pada tabel yang diperlukan.
  • Jangan pernah menggunakan akun pengguna super/root untuk aplikasi.
  • Tolak DROP, FILE, dan hak administrator.
GRANT SELECT, INSERT, UPDATE ON appdb.orders TO 'webapp'@'%';
REVOKE DROP, ALTER ON appdb.* FROM 'webapp'@'%';

Pemetaan Objek-Relasional dan Pembuat Kueri

Pemetaan objek-relasional (ORM) modern (Hibernate, Sequelize, Django ORM, SQLAlchemy) secara bawaan menggunakan parameterisasi, sehingga sebagian besar risiko injeksi dihilangkan.

Bahaya kembali muncul saat pengembang beralih ke SQL mentah atau menggunakan interpolasi teks dalam pembuat kueri. Selalu berikan nilai sebagai parameter terikat, bahkan dalam mode mentah.

Pertahanan Berlapis

Tidak ada satu kontrol pun yang cukup. Gabungkan beberapa lapisan:

  • Kueri berparameter di semua tempat (utama).
  • Validasi masukan dan daftar yang diizinkan.
  • Akun basis data dengan hak istimewa minimum.
  • Tembok api aplikasi web (WAF) untuk menangkap pola yang diketahui.
  • Penanganan kesalahan yang tidak pernah membocorkan SQL atau jejak tumpukan.

Pemeriksaan Singkat

Uji pemahaman Anda tentang pertahanan utama.

Ringkasan

Anda telah mempelajari cara kerja injeksi SQL dan cara menghentikannya:

  • SQLi muncul karena masukan yang tidak tepercaya digabungkan ke dalam kueri.
  • Kueri berparameter merupakan pertahanan utama.
  • Tambahkan validasi dengan daftar yang diizinkan, akun basis data dengan hak istimewa minimum, dan WAF.
  • Hindari pelolosan manual dan SQL dinamis di dalam prosedur tersimpan.

Pertahanan berlapis mencegah satu kesalahan berubah menjadi pembobolan.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Pertahanan terhadap Injeksi SQL” gratis?

Ya — teks lengkap “Pertahanan terhadap Injeksi SQL” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Cyber Security Academy, upgrade ke CoddyKit PRO. Kursus Cyber Security Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Pertahanan terhadap Injeksi SQL”?

Cegah serangan injeksi Kamu berlatih Cyber Security Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Cyber Security Academy?

Tidak diperlukan pengalaman sebelumnya. Cyber Security Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.

Berapa lama pelajaran “Pertahanan terhadap Injeksi SQL” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Cyber Security Academy ini?

Ya. Setiap pelajaran Cyber Security Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Pertahanan terhadap Injeksi SQL
  2. Kontrol Akses dan Enkripsi
  3. Audit dan Pemantauan
  4. Keamanan Pencadangan dan Pemulihan
← Kembali ke Cyber Security Academy