Pengarang: Trix Cyrus
Alat Pentesting Peta Jalan: Klik Di Sini
TrixSec Github: Klik Di Sini
TrixSec Telegram: Klik Di Sini
Suntikan SQL ialah salah satu kelemahan yang paling biasa dan berbahaya dalam aplikasi web. Ia berlaku apabila penyerang dapat memanipulasi pertanyaan SQL yang dilaksanakan oleh aplikasi, membenarkan mereka mengakses atau mengubah suai data dengan cara yang tidak dibenarkan. Dalam artikel ini, kami akan membincangkan cara untuk mengesan dan mempertahankan daripada serangan suntikan SQL.
SQL injection (SQLi) ialah sejenis serangan di mana penyerang memasukkan atau "menyuntik" kod SQL berniat jahat ke dalam pertanyaan, yang kemudiannya dilaksanakan oleh pelayan pangkalan data. Kerentanan ini timbul daripada pengesahan input yang lemah, di mana input pengguna dimasukkan secara langsung dalam pertanyaan SQL tanpa sanitasi yang betul.
Contohnya:
SELECT * FROM users WHERE username = 'admin' AND password = 'password123';
Jika penyerang boleh menyuntik SQL mereka sendiri ke dalam pertanyaan seperti ini:
' OR 1=1; --
Pertanyaan yang terhasil mungkin menjadi:
SELECT * FROM users WHERE username = '' OR 1=1; --' AND password = '';
Ini akan menyebabkan pangkalan data mengembalikan semua pengguna, memintas pengesahan sepenuhnya.
Banyak alat keselamatan boleh mengimbas aplikasi anda untuk mencari kelemahan suntikan SQL. Beberapa alatan yang popular ialah:
Cuba masukkan muatan suntikan SQL biasa ke dalam medan input pengguna. Contohnya:
Periksa mesej ralat: Banyak mesej ralat pangkalan data boleh mendedahkan butiran tentang pangkalan data asas dan struktur pertanyaan. Contohnya:
Pertahanan paling berkesan terhadap suntikan SQL ialah menggunakan pernyataan yang disediakan dengan pertanyaan berparameter. Ini memastikan input pengguna dianggap sebagai data, bukan kod boleh laku.
Contoh dalam Python dengan MySQL (menggunakan perpustakaan MySQLdb):
SELECT * FROM users WHERE username = 'admin' AND password = 'password123';
Dalam contoh ini, %s ialah pemegang tempat untuk input pengguna dan MySQL secara automatik melepaskan aksara khas, menjadikannya mustahil untuk penyerang menyuntik SQL yang berniat jahat.
Banyak rangka kerja pembangunan web (cth., Django, Flask) menawarkan lapisan ORM untuk berinteraksi dengan pangkalan data. ORM menjana pertanyaan SQL yang selamat dan menghalang suntikan SQL dengan melepaskan input pengguna secara automatik.
Contohnya, menggunakan ORM Django:
' OR 1=1; --
Pertanyaan ini selamat daripada suntikan SQL kerana ORM Django mengendalikan pembersihan input.
WAF boleh menyekat percubaan suntikan SQL berniat jahat dalam masa nyata dengan memeriksa permintaan HTTP masuk dan menapis muatan berniat jahat. Beberapa WAF yang popular ialah:
Pastikan akaun pangkalan data yang digunakan oleh aplikasi mempunyai keistimewaan yang paling sedikit. Contohnya:
Suntikan SQL kekal sebagai salah satu ancaman keselamatan yang paling berleluasa hari ini, tetapi dengan menggunakan langkah pertahanan yang betul, seperti kenyataan yang disediakan, pengesahan input dan penggunaan rangka kerja ORM, anda boleh mengurangkan dengan ketara risiko serangan suntikan SQL pada permohonan anda. Selain itu, kerap menguji aplikasi anda untuk kelemahan SQL dan menggunakan amalan terbaik akan membantu melindungi sistem anda dan melindungi data pengguna yang sensitif.
Dengan kekal proaktif dan sedar, anda boleh menghalang akibat buruk daripada serangan suntikan SQL dan memastikan keselamatan aplikasi anda.
~Trixsec
Atas ialah kandungan terperinci Cara Mengesan dan Mempertahankan Terhadap Serangan Suntikan SQL (Sebahagian yang Mesti Dibaca]. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!