Keamanan website adalah salah satu hal wajib yang harus mendapatkan perhatian khusus sebab harus melindungi data-data yang ada di dalamnya. Namun, nyatanya hingga saat ini, serangan terhadap website masih menjadi salah satu masalah yang selalu ada dan terus muncul di permukaan.
Ada berbagai jenis serangan terhadap website yang perlu diwaspadai oleh web developer. Tujuannya agar bisa mengambil langkah preventif untuk melakukan serangkaian pencegahan dari serangan tersebut. Salah satu serangan terhadap website yang cukup berbahaya dan paling sering terjadi adalah serangan dengan teknik SQL Injection.
Lalu, sebenarnya apakah sebenarnya SQL Injection itu sendiri? Kemudian, langkah-langkah apa sajakah yang harus dilakukan untuk mencegah penyerangan tersebut? Simak penjelasan lengkapnya berikut ini!
Apa Itu SQL Injection?
SQL merupakan singkatan dari Structured Query Language yang berarti bahasa standar yang digunakan untuk mengakses serta memanipulasi hal-hal berupa database. SQL digunakan untuk mengelola sistem database, yaitu seperti SQL server atau Oracle. Untuk penggunaan SQL hampir semuanya serupa di database system.
Setelah membahas pengertian dari SQL, selanjutnya beralih ke definisi SQL Injection. SQL Injection atau sering disebut juga SQLi adalah salah satu kode untuk teknik injeksi yang digunakan untuk menyerang celah keamanan suatu aplikasi berbasis data.
Celah yang terjadi di mana ketika melakukan input dari user yang tidak terfilter dengan benar. Seiring waktu sejak tahun 1990 berikutnya, SQL Injection semakin berkembang dan kemudian dimanfaatkan oleh pihak tertentu untuk menginjeksi string yang merupakan barisan karakter dalam pemrograman permintaan ke database yang ada.
Misalnya, apabila kolom untuk username yang seharusnya diisi dengan alfabet atau angka, namun diisi dengan karakter atau tanda baca seperti titik, koma, underline, hal-hal seperti itu. Dikarenakan berbagai hal tersebut, menyebabkan penyerang menggunakan celah tersebut dengan memasukkan query dari SQL.
SQL Injection menjadi teknik yang selalu berperan sebagai penyerang favorit untuk sebagian besar hacker, dan semakin menjamur dari tahun ke tahun. Dikarenakan semakin sulitnya, hacker melakukan tracking dan serangan melalui jaringan-jaringan yang disebabkan oleh semakin canggihnya perangkat protection system dari target.
Contohnya seperti, firewall, UTM, dan IDS atau masih banyak lagi. Dan lagi, SQL Injection sangatlah mudah dilakukan karena masih banyak para website programmer yang tidak terlalu peduli atau aware terhadap serangannya.
Jenis Serangan SQL Injection
Serangan SQL Injection dapat diklasifikasikan menjadi tiga kelompok kategori, yaitu:
1. In-band SQL Injection
In-band SQL Injection (In-band SQLI) atau sering disebut Classic SQLI merupakan jenis serangan SQL Injections yang paling umum dan mudah dieksploitasi. In-band SQL Injection terjadi saat seseorang menyerang dengan menggunakan saluran komunikasi yang sama untuk meluncurkan serangan.
Sebagai contoh, apabila penyerang dapat menggunakan jenis komunikasi alamat http untuk menyebarkan serangan ke backend dan dapat hasil di saluran yang sama. Untuk jenis serangan Classic Injection ini, terdapat dua tipe utama, yaitu:
1. Error-based SQLI
Jenis serangan yang pertama ini adalah teknik serangan In-band SQL Injection yang mengandalkan wrong massage yang nantinya dikirimkan oleh database server agar mendapatkan informasi tentang struktur dalam database.
2. Union-based SQLI
Jenis teknik serangan yang kedua adalah Union-based SQL Injection. Jenis serangan ini merupakan yang paling sering dilakukan menggunakan metode Union, yaitu dalam menggabungkan dua query yang nantinya menampilkan informasi penting dari database.
Untuk serangan mode Union ini, merupakan teknik serangan yang penyerangnya melakukan eksploitasi terhadap parameter yang rentan agar data set diubah yang nantinya dikembalikan dari perintah query yang sedang dijalankan. Biasanya tujuan serangan metode dengan Union query ini, melakukan bypass otentikasi dan juga melakukan ekstraksi data pengguna.
2. Inferential SQL Injection (Blind SQLI)
Serangan jenis ini disebut juga dengan logika serangan true or false, yaitu ketika serangan injection dilakukan mengalami keberhasilan namun tidak menampilkan pesan error kepada penyerang. Keadaanya menjadi kembali ke page home itu sendiri atau bisa digambarkan dengan menampilkan sebagian maupun seluruh konten maupun tidak menampilkan konten apapun.
Seolah kasusnya, database yang sudah tersimpan dihapus dengan sengaja. Teknik penyerangan ini, membutuhkan waktu yang cukup panjang, sebab menebak informasi yang ada di dalam database dan melihat respon dari pesan, yaitu true/false.
Serangan ini, terbagi menjadi 2 jenis, yaitu:
1. Boolean-based (content based) Blind SQL
Teknik serangan ini merupakan SQL Injection yang mengandalkan pengiriman query ke database, yang nantinya memaksa aplikasi untuk mengembalikan hasil yang berbeda. Tergantung dari query tersebut apakah akan mengembalikan hasil dari pesan true/false.
Apabila url yang dimanipulasi menghasilkan nilai true, maka jawabannya akan menampilkan konten ‘tetapi’. Lalu, untuk url yang logikanya dimanipulasi menghasilkan false, maka tidak akan ada proses yang terjadi dari attacker.
2. Time-based Blind SQLI (Double Blind)
Time-based SQL injections merupakan jenis serangan yang menggunakan teknik inferential SQL Injection yang mengandalkan pesan query ke database. Nantinya, database dipaksa untuk menunggu waktu dengan estimasi tertentu (yang hitungannya dalam satuan detik), sebelum akhirnya memberikan respon.
Waktu respon ini akan menunjukkan kepada pelaku penyerang apakah hasil dari query true atau false. Tergantung pada hasilnya, respon url, nantinya akan dikembalikan dengan penundaan atau harus segera diberikan feedback. Dan meskipun menampilkan true/false, ada data dari database yang tidak dikembalikan.
3. Out-of-band SQL Injection
Untuk serangan kategori yang ini, sebenarnya tidak terlalu umum untuk dilakukan. Sebagian besar dikarenakan bergantung pada fitur yang diaktifkan server database yang digunakan oleh web tersebut.
Serangan ini terjadi ketika penyerang tidak dapat menggunakan saluran yang sama untuk meluncurkan serangan dan untuk mengumpulkan hasil (result). Teknik serangannya, menawarkan penyerang alternatif dari teknik inferensial time-based, khususnya apabila respon server tidak terlalu stabil. Sehingga membuat serangan inferential time-based tidak dapat diandalkan keberhasilannya.
Dampak Serangan SQL Injection
SQL Injection dapat terjadi apabila user kurang memperhatikan beberapa hal, yang akan menyebabkan hacker mendapat celah untuk melakukan penyerangan. Misalnya, kurangnya penanganan terhadap karakter seperti tanda petik atau double minus.
Apabila, penyerangan ini tidak segera ditangani atau minimal dicegah dengan cara yang tepat, dapat mengakibatkan hacker melakukan kejahatan yang tentunya merugikan Anda selaku pengguna web.
Kerugian dari dampak serangan ini antara lain:
1. Penyerang dapat mengakses data pribadi Anda
Data pribadi Anda besar kemungkinan bisa dicuri kemudian digunakan untuk hal yang tidak bisa dipertanggungjawabkan. Misalnya seperti data-data penting yang berhubungan dengan rahasia bisnis, atau hal-hal sensitif lainnya tanpa harus menggunakan akun username atau password yang valid dan benar.
2. Memungkinkan hacker untuk memanipulasi data yang telah dicuri
Hacker bisa merubah, menambah bahkan menghapus data yang Anda miliki di dalam database yang telah dicuri tersebut.
3. Penyerang bisa menonaktifkan atau mematikan database pribadi Anda
Tujuan Serangan SQL Injection
SQL Injection yang dilakukan hacker memiliki suatu tujuan dari penyerangan yang dilakukan, dan penyerangan ini tidak hanya sekedar iseng. Berikut beberapa tujuan dari ditemukannya serangan ini:
1. Otentikasi Bypass
Serangan yang dilakukan memungkinkan penyerang untuk masuk ke dalam aplikasi dengan hak akses penuh administratif tanpa harus menggunakan password atau username yang real dan valid.
2. Pencurian Informasi
Untuk kategori ini, penyerang memungkinkan melakukan serangan, entah itu secara langsung maupun tidak langsung informasi yang sifatnya sensitif dan pribadi di dalam database.
3. Compromised Kesatuan Data
Perubahan isi dari database, merupakan tipe dari serangan ini. Penyerang bisa memanfaatkan serangan ini untuk memasuki deface halaman web atau bisa juga menyerang memasukkan konten atau link berbahaya ke dalam halaman web yang diserang.
4. Compromised Kesiapan Data
Serangan tipe ini, memungkinkan penyerang untuk menghilangkan berbagai informasi dengan tujuan merusak atau menghapus log dan audit info-info yang ada di dalam database.
5. Remote Command Execution
Serangan ini, melakukan perintah eksekusi melalui database yang memungkinkan penyerang melakukan tindakan compromise pada sistem operasi target.
Cara Kerja SQL Injection
SQL Injection menjadi perhatian utama ketika akan merancang dan mengembangkan sebuah aplikasi web. Mengapa demikian? Sebab hal ini terjadi ketika aplikasi menerima sinyal input pengguna yang berbahaya lalu kemudian menggunakannya sebagai bagian dari pernyataan SQL dengan tujuan meminta database backend.
Penjelasan singkat dan sederhana untuk implementasi cara kerja dari SQL Injection. User bisa mengakses suatu sistem melalui proses masuk atau login. Proses dari login ini bisa digunakan untuk memfilter serta mengetahui identitas dari user yang akan mengakses sistem.
Pengguna dapat mengisi kolom username dan password yang terdapat di first page pada website. Untuk basic, proses login sering diterapkan untuk meningkatkan keamanan atau security dari sistem sehingga user yang tidak terdaftar dalam database tidak dapat login ke dalam sistem.
Namun, untuk SQL Injection ini dapat melemahkan sistem pertahanan atau security yang telah didesain dengan baik dan kompleks agar tidak mudah ditembus oleh penyerang.
Contoh Cara Kerja SQL Injection
Untuk contoh kasus dari cara kerja SQL Injection, yaitu, apabila user sudah memiliki username “Joey” dan kemudian dengan isian password “abc123”. Apabila, pengguna memasukkan inputan pada kolom isian sesuai data tersebut.
Maka tidak akan terjadi masalah pada proses pada sistem database sebab memang data tersebut yang akan tersimpan di dalamnya. Kode-kode pada SQL tersebut bisa dilihat di bawah ini:
Select * from User where userName =
Namun, apabila pengguna membuat username menjadi “Joey #” maka karakter hastag (#) akan menyebabkan karakter yang selanjutnya tidak akan lagi dianggap sebagai kode dari SQL. Akibat dari perlakuan ini, maka username yang diisi ‘Joey’ tetap dapat input username tersebut ke sistem tanpa harus mengetahui password dari website tersebut.
Contoh lain dari cara kerja SQL Injection yaitu, apabila dengan mengganti password menjadi kode-kode SQL, yaitu password =’OR 1=1’ maka, yang akan terjadi adalah pengguna ‘Joey’ akan tetap berhasil login atau masuk ke sistem sebab inputan password tersebut merupakan kode SQL yang menandakan bahwa proses masuk (login) telah berhasil.
Logika pernyataan 1=1 adalah selalu benar, maka query akan mengembalikan semua username (nama) dan juga deskripsi produk dalam database, bahkan yang mungkin saja kasusnya tidak memenuhi syarat untuk diakses.
Jadi, SQL Injection ini menggunakan logika biner untuk melakukan penyerangan terhadap website bahkan bisa dilakukan setelah halaman utama yang berisikan username dan password untuk bisa lebih lanjut masuk untuk mengakses data pribadi bahkan data sensitif serta transaksi yang bersifat pribadi dan rahasia.
Cara Mencegah SQL Injection
Guna mencegah dan mengurangi efek dan dampak dari penyerangan yang diakibatkan oleh SQL Injection, bisa dilakukan tindakan pencegahan, antara lain:
1. Sesuaikan Input Box
Apabila form untuk input box tujuannya adalah untuk menuliskan nama, maka diberikan khusus untuk karakter huruf saja. Untuk mengisi kolom nomor telepon maka cukup diisi dengan numbering atau angka saja sehingga tindakan penyerangan SQL Injection bisa dihindari agar itu semua tidak terjadi.
2. Batasi Input Box
Agar lebih memperketat keamanan sistem dalam setiap box dibatasi untuk jumlah karakternya. Sebagai contoh untuk pengisian nama paling tidak berikan kurang lebih 30 karakter atau bisa lebih, disesuaikan dengan kebutuhan sehingga meminimalisir percobaan penyerangan SQL Injection yang masuk akan terkendala dan dicegah oleh jumlah karakter yang tersedia.
3. Filter user
Melakukan filter terhadap inputan setiap user, terutama yang menggunakan karakter dengan kutip tunggal (‘) atau validation input. Dikarenakan hal tersebut bisa menjadi salah satu trik yang dilakukan hacker untuk SQL Injection.
4. Mematikan Error Handling
Apabila terjadi error message, maka perlu di melakukan tindakan offline atau mematikan fitur notifikasi pesan error yang keluar dari SQL server. Apabila, sampai ada pesan error, ini bisa menjadi kesempatan untuk hacker melakukan deep eksploitation pada percobaan SQL Injection.
Saat server web mengalami kesalahan pemrosesan, server web seharusnya merespon dengan laman web yang umum, atau bisa mengarahkan pengguna ke lokasi standar. Informasi debug atau hal detail lainnya, tidak boleh diekspos atau diungkapkan sebab bisa menjadikan penyerang memiliki kesempatan.
Server aplikasi, seringkali dipasang dengan pesan kesalahan atau setelah debug diaktifkan secara default. Sehingga penyerang melihat yang terdokumentasi server aplikasi untuk melihat pesan kesalahan yang disembunyikan.
5. Nonaktifkan Fitur Standar SQL
Fitur standar yang berada di dalam aplikasi SQL, seperti misalnya, Stored Procedures atau Extended Stored Procedures maka akan lebih baik untuk di nonaktifkan, sebab fitur ini rawan terkena serangan dari SQL Injection.
6. Setting privilege
Lakukan perubahan pada part ‘startup and run SQL Server’ dengan setting low privilege user yang tersedia di menu SQL Server Security Tab.
Dari semua cara pencegahan yang telah dipaparkan, poin pentingnya mempelajari SQL sangatlah penting untuk menghadapi serangan dari SQL Injection. Namun, seperti Anda ketahui, sekarang cukup banyak tools serangan otomatis untuk melakukan SQL Injection. Ini menjadi poin penting yang harus selalu dipelajari dan dipahami, khususnya bagi administrator atau web programmer.
Sudah Paham Apa itu SQL Injection?
Penggambaran sederhananya, SQL Injection merupakan serangan terhadap aplikasi web, bukan server web atau sistem operasi itu sendiri. SQL Injection adalah sebuah tindakan menambahkan perintah SQL yang tidak seharusnya ke query, sehingga akan memanipulasi database dengan cara yang tidak diinginkan oleh admin atau developer database.
Sebab apabila berhasil dalam melakukan serangan, data dapat diambil, diedit dan dimodifikasi bahkan dihapus dari server database yang digunakan oleh si aplikasi web. Gawatnya, dalam keadaan tertentu, SQL Injection bisa digunakan untuk mengambil alih kendali penuh atas suatu sistem.
Sekian artikel tentang SQL Injection ini. Nantikan artikel lainnya dan jangan lupa sharing artikel ini ke semua teman dan kolega Anda. Terima kasih!
I’m an experienced SEO Specialist who can grow a website through organic channel. I’m also passionate about digital marketing and web development