Ujian manual SQL Injection ialah proses memastikan sama ada input dari borang, parameter URL, kuki, kotak carian atau API di laman web mempengaruhi atau mengubah query pangkalan data secara terkawal dan sah. Tujuan utama webmaster bukan untuk menyerang, tetapi untuk mengesan petanda awal seperti mesej ralat, respons aneh, penapisan tidak dijangka atau logik query yang rosak, kemudian menutup kerentanan tersebut secara kekal melalui query berparameter, pengesahan input, kawalan hak akses dan konfigurasi server yang selamat.
Panduan ini menyediakan senarai semak pertahanan yang boleh dilakukan tanpa membahayakan data pelanggan sebenar. Lakukan ujian hanya di laman sendiri, projek yang ada kebenaran bertulis atau di staging environment. Proses seperti cubaan tarik data, memintas login, penjelajahan jadual atau akses sistem tanpa izin tidak termasuk dalam skop artikel ini. Pendekatannya ialah: kenal pasti petanda, kumpul bukti minimum, lakukan pembetulan, dan uji semula.
Apa Itu SQL Injection & Kenapa Ia Kritikal untuk Webmaster?
SQL Injection berlaku apabila data dari pengguna disisipkan ke dalam query SQL tanpa pengasingan dan pengesahan yang selamat. Contohnya, ruang carian, penapisan, paparan produk, borang login, semakan pesanan atau senarai admin panel – jika input pengguna boleh mengubah query pangkalan data, risiko wujud. Akibatnya: kebocoran data, aktiviti tidak sah, manipulasi kandungan, akaun pengguna dicuri, atau laman web lumpuh sepenuhnya.
Di senarai OWASP Top 10, kelas injection masih mendominasi bertahun-tahun. Semua jenis projek, dari blog kecil hingga e-commerce, terdedah. Risiko lebih tinggi pada aplikasi PHP lama, plugin tidak dikemas kini, admin panel custom, penggunaan ORM yang salah dan API endpoint tanpa logging. Hosting selamat sahaja tidak cukup; hosting PHP versi terkini, akaun hosting terasing, WAF, backup berkala dan SSL membantu kurangkan impak. Untuk semak hosting anda, jadikan Penyimpanan Web dan Sijil SSL sebahagian daripada audit keselamatan.
Persediaan Selamat Sebelum Ujian Manual
Kualiti ujian manual bergantung pada persiapan. Jangan cuba secara rawak; tentukan skop, environment, rekod dan pelan pemulihan. Jika ujian dilakukan di production, pantau impak prestasi dan false positives dengan teliti. Paling selamat, lakukan ujian di staging environment yang serupa dengan production.
1. Tentukan Skop & Hak Akses Dengan Jelas
- Senaraikan domain, subdomain, panel dan API endpoint yang akan diuji.
- Servis pihak ketiga tanpa hak akses dikecualikan.
- Lakukan ujian ketika trafik rendah.
- Hadkan ujian pada pengguna dan data test sahaja untuk transaksi yang ubah data.
- Pastikan backup dan akses pemulihan tersedia jika berlaku masalah.
Jika projek baru akan dilancarkan, jangan tangguh audit keselamatan semasa migrasi domain, DNS dan hosting. Sebelum live, audit kod bersama langkah Semakan domain dan hosting Linux.
2. Peta Input Aplikasi Anda
SQL Injection biasanya muncul di titik input pengguna. Mulakan dengan pemetaan permukaan input berikut: parameter URL, borang POST, kotak carian, filter kategori, parameter sorting, ruang troli dan pesanan, profil pengguna, borang komen, senarai admin panel, JSON API body, HTTP header dan kuki. Nyatakan jenis data yang dijangka: id mesti nombor, slug berbentuk teks, tarikh format tertentu, sorting hanya untuk kolum yang dibenarkan.
3. Aktifkan Logging & Backup
Semasa ujian, log aplikasi, log akses web server dan log ralat pangkalan data adalah bukti penting. Namun, di production, jangan paparkan ralat SQL terperinci kepada pengguna. Sebaiknya, tunjukkan mesej ringkas kepada pengguna, simpan butiran pada saluran log selamat. Pastikan backup terkini sebelum ujian. Untuk laman penting, simpan backup fail, pangkalan data dan konfigurasi secara berasingan. Rancang backup anda bersama Sandaran hosting untuk perlindungan maksimum.
Senarai Semak Ujian Manual SQL Injection: Langkah Demi Langkah
Langkah berikut berasaskan pemerhatian tanpa bahaya dan logik verifikasi. Matlamat bukan tarik data, hanya kenal pasti sama ada input mengganggu logik query. Setiap ujian, rekod dahulu tingkah laku normal kemudian buat perubahan kecil yang boleh dipulihkan untuk lihat perbezaan respons.
Langkah 1: Jadikan Respons Normal Sebagai Rujukan
Pilih satu halaman produk, borang carian atau ruang filter pengguna. Dengan parameter biasa, catat kod status HTTP, masa respons, jumlah rekod, tajuk halaman dan mesej di skrin. Contoh: halaman produk beri respons 200, buka dalam 120ms dan paparkan satu produk – ini jadi rujukan anda. Tanpa rujukan, setiap error atau kelambatan boleh tersalah anggap sebagai kerentanan.
Langkah 2: Uji Ketidakpadanan Jenis & Error Parsing Ringkas
Jika satu field dijangka nombor, hantar teks; untuk field teks, hantar karakter khas; untuk field tarikh, cuba format berlainan. Sistem selamat akan tolak input atau beri ralat terkontrol. Sistem berisiko boleh paparkan error SQL, tukar jumlah rekod atau rosakkan struktur halaman. Perhatikan kandungan error: jika ada syntax SQL, nama jadual/kolum, driver, atau potongan query – ada kebocoran maklumat, walaupun bukan injection, mesti diperbaiki.
Langkah 3: Perhatikan Perbezaan Logik Respons
Sesetengah kerentanan tidak beri error jelas, cuma hasil di halaman berubah. Contoh: filter biasanya paparkan 3 produk, tapi selepas input logik kecil, jumlah jadi tidak dijangka. Ini tanda query bergantung pada input pengguna. Jangan cuba tarik data, cukup rekod perubahan respons. Sistem selamat: input khas tidak ubah logik query, hanya dianggap sebagai sebahagian dari teks carian.
Langkah 4: Analisis Mesej Error & Kod HTTP
SQL Injection tidak semestinya error besar di skrin. Kadang-kadang muncul sebagai error 500, halaman putih kosong, redirect aneh, error 403 tidak dijangka atau permintaan yang lama. Jika log server tunjuk exception pada request yang sama, analisis kod. Tanda risiko: database error, SQL syntax, unknown column, unclosed quotation, PDO exception, MySQL error, PostgreSQL error, ORM query error. Di production, jangan paparkan maklumat ini kepada pengguna.
Langkah 5: Jangan Lupa Endpoint API & AJAX
Laman moden banyak query dijalankan di belakang melalui endpoint API. Gunakan developer tools di browser (Network tab) untuk periksa permintaan JSON, endpoint filter dan panggilan AJAX admin panel. Prinsip keselamatan API sama: semak jenis data, gunakan senarai dibenarkan, query berparameter, dan ringkaskan output error. Untuk audit API lebih mendalam, rujuk keselamatan API.
Langkah 6: Uji Kawalan Hak Akses Bersama SQL Security
SQL Injection bukan sekadar penulisan query; design hak akses juga penting. Jika user hanya patut lihat pesanan sendiri tetapi boleh akses pesanan orang lain dengan tukar id, itu bukan injection, namun kelemahan kawalan akses yang serius. Sistem selamat ambil id user dari sesi server, bukan dari input client. Pastikan kawalan ini di panel pelanggan, invois, tiket sokongan dan sistem keahlian.
Bagaimana Menilai Penemuan Ujian Manual?
| Petanda | Makna Potensi | Tindakan Disyorkan |
|---|---|---|
| Mesej error SQL dipaparkan di skrin | Pengurusan error lemah, risiko injection | Tutup paparan error, log ke saluran selamat, audit query |
| Jumlah hasil berubah selepas input khas | Input mungkin ubah logik query | Gunakan query berparameter, tambah validasi jenis data |
| id nombor, tapi error 500 bila hantar teks | Validasi dan exception handling tidak cukup | Tambah validasi nombor, error 400 terkontrol, global error handler |
| API beri error database terperinci | Kebocoran maklumat dan permukaan serangan lebih luas | Gantikan error API dengan mesej umum, simpan detail dalam log server |
| Tiada isu di staging, ada di production | Perbezaan konfigurasi atau versi | Bandingkan versi PHP, plugin, mod database dan environment variable |
Cari sekurang-kurangnya dua bukti untuk sahkan kerentanan: perbezaan respons dan log. Satu error 500 tidak semestinya SQL Injection; mungkin isu permission file, memori atau plugin. Jika error database dan input pengguna tunjuk ke tempat yang sama, keutamaan tindakan tinggi.
Cara Menutup Kerentanan SQL Injection
Penyelesaian kekal bukan sekadar pasang plugin keselamatan. Cara betul ialah defense-in-depth: kod selamat, akaun database terhad, pengurusan error mantap, environment terkini, monitoring dan ujian berkala mesti digabungkan.
1. Gunakan Query Berparameter & Prepared Statement
Pertahanan asas ialah jangan gabungkan input pengguna terus ke query SQL. Dalam PHP PDO, cara selamat: `prepare` untuk query template, input diberi sebagai parameter semasa `execute`. Contoh: `$stmt = $pdo->prepare('SELECT id, title FROM posts WHERE slug = ?'); $stmt->execute([$slug]);`. Database akan anggap input sebagai data, bukan arahan.
Jika guna ORM, tetap hati-hati. Query builder standard (Laravel, Symfony, Django) biasanya selamat; query raw tetap berisiko. Jika perlu raw SQL, gunakan parameter binding, jangan gabung string secara manual.
2. Validasi Input & Gunakan Senarai Dibenarkan
Query berparameter ialah pertahanan utama; validasi adalah lapisan kedua. Field id hanya terima integer positif, tarikh mesti format ISO, email wajib format email, parameter sorting hanya untuk kolum dibenarkan. Untuk `order by`, parameter binding kadang tidak cukup – guna whitelist: contohnya sorting hanya price, created_at, title; arah hanya asc atau desc.
3. Hadkan Hak Akses Akaun Database
Akaun database aplikasi web tidak patut jadi admin. Biasanya, akaun aplikasi hanya diberi SELECT, INSERT, UPDATE, DELETE sahaja; DROP, ALTER, CREATE ditutup. Akaun report guna read-only; akaun admin maintenance berasingan. Jika ada kerentanan, impak lebih kecil.
4. Pengurusan Error yang Selamat
Di production, tutup error detail. Paparkan mesej umum: "Permintaan tidak dapat diproses". Butiran exception, query, path file dan stack trace hanya di log akses terhad. Putar log secara berkala, mask data sensitif, tutup akses log dari pihak luar.
5. Guna WAF, Versi Terkini & Hosting Selamat
Web Application Firewall boleh tapis corak serangan, tetapi tidak ganti kod selamat. Pastikan PHP, Node.js, Python packages, CMS core, tema dan plugin sentiasa dikemas kini. Versi lama boleh ada kerentanan SQL Injection dan error handling yang gagal. Webmaster WordPress boleh rujuk Keselamatan WordPress untuk tips plugin dan update yang selamat.
Di hosting, struktur akaun terasing, versi database terbaru, backup rutin, permission fail selamat dan SSL sangat penting. SSL tidak tutup SQL Injection, tapi lindungi data pengguna semasa transit. Untuk login, pembayaran dan panel pelanggan, wajib guna Sijil SSL.
6. Audit Kod Selamat & Uji Semula
Lepas pembetulan, ulang ujian manual. Hasil yang diharapkan: input khas tidak ubah logik query, error tidak beri detail pada pengguna, log hanya tunjuk exception terkawal, dan hak akses kekal terjaga. Semasa audit kod, cari bahagian yang gabung string untuk SQL. Dalam projek besar, cari keyword: SELECT, WHERE, ORDER BY, raw, query, exec dan audit fail tersebut.
Rutinitas Keselamatan Praktikal untuk Webmaster

Keselamatan SQL Injection bukan sekali, tetapi proses berterusan. Setiap bulan, semak update CMS dan plugin. Setiap tiga bulan, audit manual borang kritikal dan endpoint API. Selepas kod besar diubah, audit semula query database. Setiap ciri baru, tanya 5 soalan: Ada input pengguna? Data divalidasi? Query berparameter? Error dedah detail? Hak akses database betul?
Pastikan backup boleh dipulihkan – ramai hanya backup tanpa test restore. Hosting selamat, backup mantap dan disiplin pembangunan kod bersama akan kurangkan risiko SQL Injection dengan ketara.
Kesalahan Biasa
- Hanya percaya validasi JavaScript di client. Penyerang boleh hantar request tanpa browser; validasi server wajib.
- Sangka buang single quote sudah cukup. Pertahanan modern ialah query berparameter, bukan buang karakter.
- Anggap admin panel sudah selamat. Admin panel juga terima input pengguna – mesti diuji juga.
- Fikir ORM automatik selamat untuk semua query. Query raw dan field sorting dinamik boleh berisiko.
- Beri hak akses database terlalu banyak. Prinsip least privilege mesti diamalkan.
- Biarkan error detail terbuka di production. Ini boleh jadi peta jalan untuk penyerang.
Ringkasan Prioriti Test & Penutupan
| Prioriti | Tindakan | Hasil Dijangka |
|---|---|---|
| Tinggi | Guna query berparameter | Input pengguna tidak boleh jadi arahan SQL |
| Tinggi | Tutup error detail di production | Maklumat jadual, kolum, query tidak bocor |
| Tinggi | Kurangkan hak akses database | Impak kerentanan terhad |
| Sederhana | WAF & aturan keselamatan | Permintaan berbahaya ditapis |
| Sederhana | Ujian manual berkala | Kod baru diuji awal |
| Sederhana | Test restore backup | Pemulihan cepat selepas insiden |
Soalan Lazim (FAQ)
Adakah ujian manual SQL Injection sah dari segi undang-undang?
Ya, jika hanya di sistem sendiri atau projek dengan izin bertulis. Ujian tanpa izin di laman orang lain adalah salah dari segi undang-undang dan etika. Tetapkan skop, waktu dan kaedah sebelum ujian.
Bolehkah WAF sahaja tutup risiko SQL Injection?
Tidak. WAF ialah lapisan tambahan, bukan penyelesaian kekal. Penyelesaian sebenar: query berparameter, validasi input, error handling selamat dan prinsip least privilege.
Di mana SQL Injection sering berlaku pada WordPress?
Biasanya plugin tidak dikemas kini, tema tidak dipercayai, shortcode custom, endpoint AJAX dan pemprosesan borang yang cacat. Pastikan core, tema dan plugin sentiasa terkini; buang plugin tidak digunakan.
Adakah SQL Injection sama dengan kelemahan kawalan akses?
Tidak. SQL Injection ialah query berubah akibat input pengguna. Kawalan akses lemah ialah pengguna dapat akses data yang sepatutnya tidak boleh. Kedua-dua masalah boleh wujud serentak – audit bersama penting.
Bagaimana sahkan kerentanan sudah ditutup?
Selepas pembetulan, ulang ujian dengan input sama. Hasil tidak berubah, tiada error SQL detail, log tiada error tidak terkawal dan hak akses berfungsi. Untuk sistem kritikal, audit kod atau penilaian keselamatan oleh pihak ketiga disyorkan.
Penutup
Proses ujian manual SQL Injection bukan kemewahan teknikal bagi webmaster, tapi tanggungjawab penyelenggaraan berkala. Dengan ujian selamat, anda boleh kenal pasti input berisiko, tutup kerentanan secara kekal melalui query berparameter dan pengurusan hak akses yang betul. Jika anda menggunakan Hostragons, pastikan hosting, SSL, backup dan lapisan keselamatan dinilai bersama untuk daya tahan jangka panjang. Untuk semak keperluan hosting dan keselamatan laman anda tanpa tekanan jualan, rujuk penyelesaian Hostragons hari ini.