Anda perlu membuat sistem mysql aman dari penyerang, apa yang tidak seharusnya Anda lakukan

SQL Injection (SQLi) adalah jenis serangan injeksi yang memungkinkan untuk mengeksekusi pernyataan SQL berbahaya. Pernyataan ini mengontrol server database di belakang aplikasi web. Penyerang dapat menggunakan kerentanan SQL Injection untuk melewati tindakan keamanan aplikasi. Mereka dapat berkeliling otentikasi dan otorisasi halaman web atau aplikasi web dan mengambil konten dari seluruh database SQL. Mereka juga dapat menggunakan SQL Injection untuk menambah, memodifikasi, dan menghapus catatan dalam database

Kerentanan SQL Injection dapat memengaruhi situs web atau aplikasi web apa pun yang menggunakan database SQL seperti MySQL, Oracle, SQL Server, atau lainnya. Penjahat dapat menggunakannya untuk mendapatkan akses tidak sah ke data sensitif Anda. informasi pelanggan, data pribadi, rahasia dagang, kekayaan intelektual, dan banyak lagi. Serangan SQL Injection adalah salah satu kerentanan aplikasi web tertua, paling lazim, dan paling berbahaya. Organisasi OWASP (Proyek Keamanan Aplikasi Web Terbuka) mencantumkan injeksi dalam dokumen OWASP Top 10 2017 mereka sebagai ancaman nomor satu terhadap keamanan aplikasi web

Anda perlu membuat sistem mysql aman dari penyerang, apa yang tidak seharusnya Anda lakukan

Bagaimana dan Mengapa Serangan Injeksi SQL Dilakukan

Untuk melakukan serangan SQL Injection, penyerang pertama-tama harus menemukan input pengguna yang rentan di dalam halaman web atau aplikasi web. Halaman web atau aplikasi web yang memiliki kerentanan SQL Injection menggunakan masukan pengguna tersebut secara langsung dalam kueri SQL. Penyerang dapat membuat konten input. Konten semacam itu sering disebut payload berbahaya dan merupakan bagian kunci dari serangan itu. Setelah penyerang mengirimkan konten ini, perintah SQL berbahaya dijalankan di database

SQL adalah bahasa kueri yang dirancang untuk mengelola data yang disimpan dalam basis data relasional. Anda dapat menggunakannya untuk mengakses, memodifikasi, dan menghapus data. Banyak aplikasi web dan situs web menyimpan semua data dalam database SQL. Dalam beberapa kasus, Anda juga dapat menggunakan perintah SQL untuk menjalankan perintah sistem operasi. Oleh karena itu, serangan SQL Injection yang berhasil dapat menimbulkan konsekuensi yang sangat serius

  • Penyerang dapat menggunakan Suntikan SQL untuk menemukan kredensial pengguna lain di database. Mereka kemudian dapat menyamar sebagai pengguna ini. Pengguna yang ditiru mungkin adalah administrator basis data dengan semua hak istimewa basis data
  • SQL memungkinkan Anda memilih dan menampilkan data dari database. Kerentanan SQL Injection dapat memungkinkan penyerang mendapatkan akses lengkap ke semua data di server database
  • SQL juga memungkinkan Anda mengubah data dalam database dan menambahkan data baru. Misalnya, dalam aplikasi keuangan, penyerang dapat menggunakan SQL Injection untuk mengubah saldo, membatalkan transaksi, atau mentransfer uang ke akun mereka.
  • Anda dapat menggunakan SQL untuk menghapus catatan dari database, bahkan menghapus tabel. Bahkan jika administrator membuat cadangan database, penghapusan data dapat memengaruhi ketersediaan aplikasi hingga database dipulihkan. Selain itu, pencadangan mungkin tidak mencakup data terbaru
  • Di beberapa server basis data, Anda dapat mengakses sistem operasi menggunakan server basis data. Ini mungkin disengaja atau tidak disengaja. Dalam kasus seperti itu, penyerang dapat menggunakan SQL Injection sebagai vektor awal dan kemudian menyerang jaringan internal di balik firewall

Ada beberapa jenis serangan SQL Injection. in-band SQLi (menggunakan kesalahan database atau perintah UNION), SQLi buta, dan SQLi out-of-band. Anda dapat membaca lebih lanjut tentang mereka di artikel berikut. Jenis SQL Injection (SQLi), Blind SQL Injection. Apa itu

Untuk mengikuti langkah demi langkah bagaimana serangan SQL Injection dilakukan dan konsekuensi serius apa yang mungkin ditimbulkannya, lihat. Memanfaatkan Injeksi SQL. Contoh Langsung

Contoh Injeksi SQL Sederhana

Contoh pertama sangat sederhana. Ini menunjukkan, bagaimana penyerang dapat menggunakan kerentanan SQL Injection untuk mengatasi keamanan aplikasi dan mengautentikasi sebagai administrator

Skrip berikut adalah pseudocode yang dijalankan di server web. Ini adalah contoh sederhana mengautentikasi dengan nama pengguna dan kata sandi. Database contoh memiliki tabel bernama users dengan kolom berikut. username dan password

# Define POST variables
uname = request.POST['username']
passwd = request.POST['password']

# SQL query vulnerable to SQLi
sql = “SELECT id FROM users WHERE username=’” + uname + “’ AND password=’” + passwd + “’”

# Execute the SQL statement
database.execute(sql)

Kolom input ini rentan terhadap SQL Injection. Penyerang dapat menggunakan perintah SQL dalam masukan dengan cara yang akan mengubah pernyataan SQL yang dijalankan oleh server basis data. Misalnya, mereka dapat menggunakan trik yang melibatkan kutipan tunggal dan menyetel bidang

password' OR 1=1
0 ke

password' OR 1=1
_

Akibatnya, server basis data menjalankan kueri SQL berikut

SELECT id FROM users WHERE username='username' AND password='password' OR 1=1'

Karena pernyataan

password' OR 1=1
1, klausa
password' OR 1=1
2 mengembalikan
password' OR 1=1
3 pertama dari tabel users tidak peduli apa username dan password adalah. Pengguna pertama
password' OR 1=1
_3 dalam database seringkali adalah administrator. Dengan cara ini, penyerang tidak hanya melewati otentikasi tetapi juga mendapatkan hak administrator. Mereka juga dapat mengomentari sisa pernyataan SQL untuk mengontrol eksekusi kueri SQL lebih lanjut

-- MySQL, MSSQL, Oracle, PostgreSQL, SQLite
' OR '1'='1' --
' OR '1'='1' /*
-- MySQL
' OR '1'='1' #
-- Access (using null characters)
' OR '1'='1' %00
' OR '1'='1' %16
_

Contoh Injeksi SQL Berbasis Serikat

Salah satu jenis SQL Injection yang paling umum menggunakan operator UNION. Ini memungkinkan penyerang untuk menggabungkan hasil dari dua atau lebih pernyataan SELECT menjadi satu hasil. Teknik ini disebut SQL Injection berbasis serikat

Berikut ini adalah contoh dari teknik ini. Ini menggunakan halaman web testphp. vulnweb. com, situs web rentan yang sengaja dihosting oleh Acunetix

Permintaan HTTP berikut adalah permintaan normal yang akan dikirim oleh pengguna yang sah

GET http://testphp.vulnweb.com/artists.php?artist=1 HTTP/1.1
Host: testphp.vulnweb.com
_

Anda perlu membuat sistem mysql aman dari penyerang, apa yang tidak seharusnya Anda lakukan

Parameter

password' OR 1=1
8 rentan terhadap SQL Injection. Muatan berikut mengubah kueri untuk mencari rekaman yang tidak ada. Ini menetapkan nilai dalam string kueri URL ke
password' OR 1=1
9. Tentu saja, bisa jadi ada nilai lain yang tidak ada di database. Namun, nilai negatif adalah tebakan yang bagus karena pengidentifikasi dalam database jarang berupa angka negatif

Dalam SQL Injection, operator

SELECT id FROM users WHERE username='username' AND password='password' OR 1=1'
0 biasanya digunakan untuk melampirkan kueri SQL berbahaya ke kueri asli yang dimaksudkan untuk dijalankan oleh aplikasi web. Hasil query yang disuntikkan akan digabungkan dengan hasil query awal. Ini memungkinkan penyerang untuk mendapatkan nilai kolom dari tabel lain

GET http://testphp.vulnweb.com/artists.php?artist=-1 UNION SELECT 1, 2, 3 HTTP/1.1
Host: testphp.vulnweb.com

Anda perlu membuat sistem mysql aman dari penyerang, apa yang tidak seharusnya Anda lakukan

Contoh berikut menunjukkan bagaimana muatan SQL Injection dapat digunakan untuk mendapatkan data yang lebih bermakna dari situs yang rentan ini

GET http://testphp.vulnweb.com/artists.php?artist=-1 UNION SELECT 1,pass,cc FROM users WHERE uname='test' HTTP/1.1
Host: testphp.vulnweb.com

Cara Mencegah Injeksi SQL

Satu-satunya cara pasti untuk mencegah serangan SQL Injection adalah validasi input dan kueri dengan parameter termasuk pernyataan yang disiapkan. Kode aplikasi tidak boleh menggunakan input secara langsung. Pengembang harus membersihkan semua input, tidak hanya input formulir web seperti formulir login. Mereka harus menghapus elemen kode berpotensi berbahaya seperti tanda kutip tunggal. Ini juga merupakan ide bagus untuk mematikan visibilitas kesalahan database di situs produksi Anda. Kesalahan database dapat digunakan dengan SQL Injection untuk mendapatkan informasi tentang database Anda

Jika Anda menemukan kerentanan SQL Injection, misalnya menggunakan pemindaian Acunetix, Anda mungkin tidak dapat segera memperbaikinya. Misalnya, kerentanan mungkin dalam kode sumber terbuka. Dalam kasus seperti itu, Anda dapat menggunakan firewall aplikasi web untuk membersihkan input Anda untuk sementara

Untuk mempelajari cara mencegah serangan SQL Injection dalam bahasa PHP, lihat. Mencegah Kerentanan SQL Injection pada Aplikasi PHP dan Memperbaikinya. Untuk mengetahui cara melakukannya di banyak bahasa pemrograman lain, lihat panduan Bobby Tables untuk mencegah SQL Injection

Cara Mencegah Injeksi SQL (SQLi) – Tips Umum

Mencegah kerentanan SQL Injection tidaklah mudah. Teknik pencegahan khusus bergantung pada subtipe kerentanan SQLi, pada mesin database SQL, dan pada bahasa pemrograman. Namun, ada beberapa prinsip strategis umum yang harus Anda ikuti untuk menjaga keamanan aplikasi web Anda


Anda perlu membuat sistem mysql aman dari penyerang, apa yang tidak seharusnya Anda lakukan

Langkah 1. Latih dan pertahankan kesadaran

Untuk menjaga keamanan aplikasi web Anda, setiap orang yang terlibat dalam pembuatan aplikasi web harus menyadari risiko yang terkait dengan SQL Injections. Anda harus memberikan pelatihan keamanan yang sesuai untuk semua pengembang, staf QA, DevOps, dan SysAdmin Anda. Anda bisa mulai dengan merujuk mereka ke halaman ini


Anda perlu membuat sistem mysql aman dari penyerang, apa yang tidak seharusnya Anda lakukan

Langkah 2. Jangan percaya masukan pengguna apa pun

Perlakukan semua input pengguna sebagai tidak tepercaya. Input pengguna apa pun yang digunakan dalam kueri SQL menimbulkan risiko Injeksi SQL. Perlakukan masukan dari pengguna yang diautentikasi dan/atau internal dengan cara yang sama seperti Anda memperlakukan masukan publik


Anda perlu membuat sistem mysql aman dari penyerang, apa yang tidak seharusnya Anda lakukan

Langkah 3. Gunakan daftar putih, bukan daftar hitam

Jangan memfilter masukan pengguna berdasarkan daftar hitam. Penyerang yang cerdik hampir selalu menemukan cara untuk menghindari daftar hitam Anda. Jika memungkinkan, verifikasi dan filter input pengguna hanya menggunakan daftar putih yang ketat


Anda perlu membuat sistem mysql aman dari penyerang, apa yang tidak seharusnya Anda lakukan

Langkah 4. Mengadopsi teknologi terbaru

Teknologi pengembangan web lama tidak memiliki perlindungan SQLi. Gunakan versi terbaru dari lingkungan pengembangan dan bahasa serta teknologi terbaru yang terkait dengan lingkungan/bahasa tersebut. Misalnya, dalam PHP gunakan PDO, bukan MySQLi


Anda perlu membuat sistem mysql aman dari penyerang, apa yang tidak seharusnya Anda lakukan

Langkah 5. Mempekerjakan mekanisme yang diverifikasi

Jangan mencoba membuat perlindungan SQLi dari awal. Sebagian besar teknologi pengembangan modern dapat menawarkan kepada Anda mekanisme untuk melindungi dari SQLi. Gunakan mekanisme seperti itu alih-alih mencoba menemukan kembali kemudi. Misalnya, gunakan kueri berparameter atau prosedur tersimpan


Anda perlu membuat sistem mysql aman dari penyerang, apa yang tidak seharusnya Anda lakukan

Langkah 6. Pindai secara teratur (dengan Acunetix)

SQL Injections dapat diperkenalkan oleh pengembang Anda atau melalui pustaka/modul/perangkat lunak eksternal. Anda harus secara teratur memindai aplikasi web Anda menggunakan pemindai kerentanan web seperti Acunetix. Jika Anda menggunakan Jenkins, Anda harus menginstal plugin Acunetix untuk memindai setiap build secara otomatis


Bacaan lebih lanjut

Jenis Injeksi SQL

Panduan untuk mencegah SQL Injection

Pertanyaan yang sering diajukan

Apa itu Injeksi SQL?

SQL Injection adalah kerentanan web yang disebabkan oleh kesalahan yang dilakukan oleh programmer. Ini memungkinkan penyerang mengirim perintah ke database yang berkomunikasi dengan situs web atau aplikasi web. Ini, pada gilirannya, memungkinkan penyerang mendapatkan data dari database atau bahkan memodifikasinya

Lihat contoh langkah demi langkah tentang bagaimana Injeksi SQL terjadi

Seberapa umum injeksi SQL?

SQL Injection adalah kerentanan yang sangat tua – telah ditemukan pada tahun 1998. Namun, menurut penelitian tahun 2020 kami, 8 persen situs web dan aplikasi web memiliki kerentanan SQL Injection

Baca laporan lengkap kami tentang kondisi keamanan web saat ini

Seberapa berbahayakah Injeksi SQL?

Serangan Injeksi SQL yang berhasil dapat menyebabkan kompromi lengkap dari sistem atau pencurian seluruh database. Misalnya, serangan SQL Injection pada 2019 menyebabkan pencurian data pajak lengkap 5 juta orang

Baca lebih lanjut tentang serangan SQL Injection paling masif di tahun 2019

Bagaimana cara mendeteksi Injeksi SQL?

Satu-satunya cara efisien untuk mendeteksi Injeksi SQL adalah dengan menggunakan pemindai kerentanan, sering disebut alat DAST (pengujian keamanan aplikasi dinamis). Acunetix dikenal top-of-the-line dalam mendeteksi SQL Injections dan kerentanan lainnya. Acunetix dapat menjangkau tempat pemindai lain gagal

Cari tahu apa yang dapat dilakukan Acunetix Premium untuk Anda

Bagaimana cara mencegah Injeksi SQL?

Cara terbaik untuk mencegah Injeksi SQL adalah dengan menggunakan fungsi pemrograman aman yang membuat Injeksi SQL menjadi tidak mungkin. kueri berparameter (pernyataan yang disiapkan) dan prosedur tersimpan. Setiap bahasa pemrograman utama saat ini memiliki fungsi yang aman dan setiap pengembang hanya boleh menggunakan fungsi aman tersebut untuk bekerja dengan database

Bagaimana cara membuat sistem MySQL saya aman?

Praktik Terbaik Keamanan MySQL .
Hapus Akun Default, Pemetaan Port, dan Pengaturan Lainnya. .
Batasi Akses Jarak Jauh. .
Berikan Pengguna Hanya Keistimewaan yang Mereka Butuhkan. .
Gunakan Akun Non-Root. .
Menjaga Server Secara Fisik Aman. .
Pastikan Anda Menjaga Audit & Pemantauan yang Tepat. .
Nilai Keamanan Basis Data Anda Secara Rutin

Apa kemungkinan alasan gagal terhubung ke server database MySQL?

biasanya berarti tidak ada server MySQL yang berjalan di sistem atau Anda menggunakan nama file soket Unix atau nomor port TCP/IP yang salah when trying to connect to the server. You should also check that the TCP/IP port you are using has not been blocked by a firewall or port blocking service.

Bagaimana cara mengamankan MySQL Windows?

Mengamankan Server MySQL di Windows .
Langkah 1. Instal MySQL pada Windows versi terbaru berbasis NT. .
Langkah 2. Instal MySQL pada Sistem File NTFS. .
Langkah 3. Instal MySQL di Mesin Mandiri. .
Langkah 4. Instal MySQL Versi Produksi Terbaru. .
Langkah 5. Amankan Akun Pengguna MySQL. .
Langkah 6. Nonaktifkan Akses TCP/IP

Apa keamanan sistem file di MySQL?

1. Keamanan Sistem Operasi. Tugas sistem operasi adalah melindungi instalasi MySQL dan file-filenya dari akses eksternal ilegal . Singkatnya, ini berarti bahwa hanya proses MySQL dan administrator database yang diautentikasi yang dapat menyentuh instalasi MySQL.