Suntikan SQL dan Suntikan Perintah
Pelajari cara penyerang membina muatan suntikan yang memanipulasi pertanyaan pangkalan data atau perintah OS, serta cara pertanyaan berparameter dan pengesahan input menghalangnya.
Suntikan SQL dan Suntikan Perintah ialah pelajaran Security+ Academy percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Security+ Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Security+ Academy merangkumi sejumlah 4 pelajaran.
Apakah SQL Injection?
SQL injection (SQLi) berlaku apabila penyerang memasukkan atau 'menyuntik' kod SQL berniat jahat ke dalam medan input yang kemudiannya dihantar kepada query pangkalan data. Oleh sebab aplikasi menggabungkan input User terus ke dalam pernyataan SQL, pangkalan data tidak dapat membezakan data yang sah daripada Commands yang dibekalkan penyerang. SQLi secara konsisten berada dalam kalangan Vulnerabilities Web yang paling berbahaya dalam OWASP Top 10.
Contoh Muatan SQLi Klasik
Query log masuk yang terdedah mungkin kelihatan seperti: SELECT * FROM users WHERE username='INPUT' AND password='INPUT'. Penyerang yang membekalkan ' OR '1'='1 sebagai nama User mengubah query tersebut supaya klausa WHERE sentiasa benar, lalu memintas authentication sepenuhnya. Ini ialah injection berasaskan tautologi klasik.
-- Vulnerable query (DO NOT use in production)
SELECT * FROM users
WHERE username = '' OR '1'='1'
AND password = 'anything';
-- Returns ALL rows — auth bypassedJenis-jenis SQL Injection
Attack SQL injection hadir dalam beberapa bentuk: In-band SQLi memulangkan hasil terus dalam respons HTTP (berasaskan error atau union). Blind SQLi membuat inferens tentang data melalui respons Boolean benar/palsu atau kelewatan masa yang disengajakan (SLEEP(5)). Out-of-band SQLi menggunakan saluran sekunder seperti carian DNS untuk mengekstrak data apabila respons tidak dapat dilihat.
-- Time-based blind SQLi example
SELECT * FROM users
WHERE id = '1' AND SLEEP(5)--';
-- If response is delayed 5s, injection succeededMencegah SQLi: Query Berparameter
Pertahanan utama terhadap SQL injection ialah query berparameter (juga dipanggil pernyataan yang disediakan). Dalam query berparameter, struktur SQL disusun terlebih dahulu, manakala input User dihantar sebagai parameter berasingan — input itu tidak boleh mengubah struktur query. Pendekatan ini tidak bergantung pada bahasa dan jauh lebih boleh dipercayai berbanding sanitasi input semata-mata.
# Python example — parameterized query (safe)
import sqlite3
conn = sqlite3.connect('app.db')
cursor = conn.cursor()
username = 'admin'
password = 'secret'
cursor.execute(
'SELECT * FROM users WHERE username=? AND password=?',
(username, password) # parameters, never concatenated
)Pengesahan Input sebagai Pertahanan Berlapis
Walaupun query berparameter ialah pertahanan utama, pengesahan input menyediakan lapisan kedua yang penting. Pengesahan senarai benarkan hanya menerima aksara yang dijangka (contohnya, aksara abjad angka sahaja untuk medan nama User) dan menolak yang lain. Pengesahan senarai larang menyekat aksara buruk yang diketahui, tetapi penyerang sering mengekod atau mengaburkan muatan untuk memintas senarai larang — menjadikan senarai benarkan jauh lebih kukuh.
Apakah Command Injection?
Command injection (injection arahan OS) berlaku apabila aplikasi menghantar input User yang tidak disanitasi kepada shell System. Tidak seperti SQL injection yang menyasarkan pangkalan data, command injection menyasarkan sistem pengendalian itu sendiri — memberikan penyerang keupayaan untuk menjalankan Commands sewenang-wenangnya dengan Privileges proses pelayan Web. Ia dinilai sebagai keterukan kritikal dan sering membawa kepada pengambilalihan penuh System.
Contoh Command Injection
Aplikasi Web yang melakukan ping terhadap alamat IP yang dibekalkan User mungkin menggunakan: ping -c 1 INPUT. Jika penyerang membekalkan 8.8.8.8; cat /etc/passwd, shell mentafsir ; sebagai pemisah Command lalu menjalankan kedua-dua Commands. Operator injection yang biasa termasuk ;, &&, ||, | dan penggantian Command menggunakan backtick.
# Vulnerable Python (subprocess with shell=True)
import subprocess
user_ip = '8.8.8.8; cat /etc/passwd' # attacker input
subprocess.run('ping -c 1 ' + user_ip, shell=True)
# Safe alternative — avoid shell=True, pass args as list
subprocess.run(['ping', '-c', '1', '8.8.8.8'])Mencegah Command Injection
Pertahanan paling selamat terhadap command injection ialah mengelakkan pemanggilan Commands OS daripada input User sepenuhnya — gunakan fungsi pustaka yang mencapai matlamat yang sama. Apabila pemanggilan shell tidak dapat dielakkan, hantar argumen sebagai senarai (jangan sekali-kali sebagai rentetan yang digabungkan), nyahdayakan tafsiran shell, sahkan input terhadap senarai benarkan yang ketat dan jalankan proses dengan akaun User yang mempunyai Privileges paling minimum.
Konteks OWASP: Suntikan dalam 10 Teratas
10 Teratas OWASP menyenaraikan suntikan (yang merangkumi suntikan SQL, NoSQL, OS dan LDAP) sebagai salah satu risiko keselamatan aplikasi yang paling kritikal. OWASP mengesyorkan pendekatan pertahanan berlapis: gunakan API selamat yang mengelakkan penterjemah, lakukan pengesahan input positif (senarai benarkan) pada bahagian Server, lepaskan aksara khas menggunakan sintaks khusus untuk penterjemah tersebut, dan gunakan kawalan SQL seperti LIMIT untuk mencegah pendedahan data secara besar-besaran.
Pengesanan: WAF dan Pencatatan
Tembok Api Aplikasi Web (WAF) boleh mengesan dan menyekat muatan suntikan biasa dengan memeriksa permintaan HTTP berdasarkan corak tandatangan. Walau bagaimanapun, WAF boleh dipintas melalui helah pengekodan dan bukan pengganti kepada pengekodan selamat. Pencatatan aplikasi yang betul — merekod parameter pertanyaan, kod respons dan mesej ralat — membolehkan pasukan keselamatan mengenal pasti percubaan suntikan semasa semakan insiden.
Kesan Serangan Suntikan dalam Dunia Sebenar
Serangan suntikan telah menyebabkan beberapa pelanggaran data terbesar dalam sejarah. Pelanggaran Equifax pada tahun 2017 mendedahkan 147 juta rekod melalui kecacatan aplikasi web. Suntikan SQL terhadap Rangkaian PlayStation Sony menjejaskan 77 juta akaun pada tahun 2011. Insiden ini menunjukkan bahawa kecacatan suntikan membawa kesan perniagaan yang amat besar: kecurian data, denda kawal selia, kerosakan reputasi dan liabiliti undang-undang semuanya menyusuli serangan suntikan yang berjaya.
Semakan Pantas
Uji pemahaman anda tentang konsep CompTIA Security+ (SY0-701) daripada pelajaran ini.
Imbas Kembali Pelajaran
Dalam pelajaran ini, anda telah mempelajari bahawa: suntikan SQL mengeksploitasi input yang tidak dibersihkan dan digabungkan ke dalam pertanyaan pangkalan data, suntikan arahan menghantar input berniat jahat ke shell OS melalui operator seperti ; dan |, dan pertanyaan berparameter serta mengelakkan shell=True ialah pertahanan utama. Seterusnya, kita akan meneroka serangan Skrip Rentas Tapak (XSS) dan CSRF.
Pelajari Security+ Academy dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 30
- Pelajaran
- 120
Soalan Lazim
Adakah pelajaran “Suntikan SQL dan Suntikan Perintah” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Security+ Academy, termasuk “Suntikan SQL dan Suntikan Perintah”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Security+ Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Suntikan SQL dan Suntikan Perintah”?
Pelajari cara penyerang membina muatan suntikan yang memanipulasi pertanyaan pangkalan data atau perintah OS, serta cara pertanyaan berparameter dan pengesahan input menghalangnya. Anda berlatih Security+ Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Security+ Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Security+ Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.
Berapa lamakah pelajaran “Suntikan SQL dan Suntikan Perintah” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Security+ Academy ini?
Ya. Setiap pelajaran Security+ Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Suntikan SQL dan Suntikan Perintah
- Penskripan Rentas Tapak (XSS) dan CSRF
- Pengesahan Rosak dan Penyahserialan Tidak Selamat
- SDLC Selamat, Alat SAST dan DAST