Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

Apa itu Injeksi SQL?

Pengantar Injeksi SQL

  • Injeksi SQL adalah kerentanan atau teknik yang dapat menghancurkan database situs web atau aplikasi web. Ini adalah salah satu serangan berbasis web yang paling banyak digunakan.
  • Tujuan utama injeksi SQL adalah untuk mendapatkan akses ke database situs web. Jadi, agar injeksi SQL berfungsi, diperlukan aplikasi web yang terhubung ke database.
  • Karena database memiliki semua data termasuk kata sandi administrator yaitu, kata sandi login pemilik, penyerang situs web dapat mengakses halaman admin untuk mengedit situs web dengan mengisi formulir web.
  • Formulir web mencakup nama pengguna dan kata sandi. Saat pengguna memasukkan sesuatu di bidang input formulir web, kueri SQL SELECT diimplementasikan pada database.
  • Sistem mencoba untuk mencocokkan input yaitu, nama pengguna dan kata sandi yang dimasukkan oleh pengguna dengan nama pengguna dan kata sandi yang sudah tersimpan di database. Jika kedua input cocok, maka pengguna mendapatkan akses jika tidak, akses tersebut akan ditolak oleh pengguna.
  • Ada situs web tertentu yang tidak memiliki mekanisme untuk memblokir masukan lainnya. Situs web semacam itu rentan terhadap injeksi SQL. Dalam hal ini, kueri SQL apa pun dapat dimasukkan sebagai input dan sistem akan menjalankannya.
  • Misalnya, penyerang dapat memasukkan query untuk mendownload seluruh database, menghapus database, memodifikasi database dan membuat kondisi selalu benar. Jika kondisi sandi dibuat selalu benar, maka tidak masalah jika ada sandi yang dimasukkan. Untuk kata sandi, sistem mengakses yang disimpan dalam database, tetapi jika permintaan dibuat untuk menjatuhkan tabel kata sandi di database, sistem akan mulai mengambil kata sandi apa pun. Dengan cara ini, penyerang bisa mendapatkan akses ke database dengan mudah. Sekarang dia dapat mengetahui semua kata sandi orang yang masuk ke situs web, berbagai tabel dan isinya, struktur internal situs web, dan informasi lain yang terkait dengan situs web.
  • Metode ini disebut injeksi SQL di mana Anda memasukkan kueri ke dalam database untuk memanipulasinya dan mendapatkan akses tidak sah ke dalamnya. Ini adalah jenis serangan situs web yang paling berbahaya untuk database berbasis SQL.
  • Salah satu cara untuk mencegah serangan tersebut adalah dengan memblokir input yang tidak perlu selain nama pengguna dan sandi.
  • Perintah injeksi SQL dibuat pada saat dijalankan. Jadi hindari perintah input dinamis. Cegah database dengan firewall aplikasi web . Selain itu, jangan mengungkapkan informasi rahasia apa pun terkait situs web ini kepada siapa pun.
  • Situs web dapat mengalami kerugian data dan finansial yang sangat besar karena serangan SQL semacam itu.

Contoh:

Misalkan, ada aplikasi web dengan database yang terhubung dengannya. Aplikasi web ini mungkin mengambil input dari pengguna dan menyimpan informasi ke database atau mengambil data dari database dan menampilkannya kepada pengguna.

Dalam kedua kasus, ada kueri SQL atau kueri basis data yang dihasilkan pada aplikasi web yang dikirim ke basis data dan kueri ini dijalankan pada basis data dan informasi yang relevan dikembalikan ke aplikasi web. Ini adalah bagaimana skenario normal bekerja.

Jadi, ketika penyerang menggunakan injeksi SQL, ia mencoba memanipulasi kueri basis data ini untuk membuatnya melakukan sesuatu yang idealnya tidak dilakukan. Jadi, penyerang mengubah kueri SQL, memanipulasinya, dia menyuntikkan beberapa string berbahaya dalam kueri SQL dan kemudian membuatnya melakukan sesuatu dengan cara yang tidak sah. Jadi sekarang kueri basis data dimanipulasi oleh penyerang, lalu kueri jahat ini dikirim ke basis data, dijalankan di sana dan hasil yang relevan dikembalikan.

Ini dikenal sebagai injeksi SQL. Injeksi SQL adalah teknik injeksi kode yang digunakan untuk mengeksekusi pernyataan SQL berbahaya dan dinamis. Serangan SQL adalah sesuatu yang digunakan penyerang untuk mengambil kendali atas server database.

Cara mencegah injeksi SQL

  1. Hindari penggunaan SQL dinamis

Input yang diberikan oleh pengguna tidak boleh langsung ditempatkan ke dalam query SQL yang akan dioperasikan pada database. Alih-alih menggunakan SQL dinamis, seseorang harus menggunakan prosedur tersimpan, pernyataan yang disiapkan, dan kueri berparameter karena lebih aman dibandingkan dengan kueri SQL dinamis.

  • Masukan yang diberikan pengguna harus disanitasi

Jenis data yang akan diberikan oleh pengguna harus dicocokkan dan diverifikasi dengan benar dengan jenis yang diharapkan.

  • Data sensitif tidak boleh dalam teks biasa

Sebelum menyimpan data rahasia seperti kata sandi ke dalam database, itu harus dienkripsi dengan benar dengan hash. Salting harus diterapkan pada hash terenkripsi untuk memberikan lapisan keamanan ekstra pada data rahasia.

  • Kesalahan basis data tidak boleh ditampilkan langsung ke pengguna

Informasi kesalahan yang ditampilkan kepada penyerang dapat membantunya mendapatkan informasi tentang database.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Menginstal ArangoDB di Ubuntu 20.04

  2. Pisahkan string dengan cara yang benar – atau cara terbaik berikutnya

  3. Bucketizing data tanggal dan waktu

  4. Untuk terakhir kalinya, TIDAK, Anda tidak dapat mempercayai IDENT_CURRENT()

  5. Panduan Utama Anda untuk Bergabung dengan SQL:INNER JOIN – Bagian 1