Apa itu SQL Injection, Contoh, dan Cara Mencegahnya

Yuk, pahami apa itu SQL injection, contoh, sampai cara mencegahnya!
Bobby Christian
May 4, 2023
6
min read

Mau Belajar

Data Analytics

?

Belajar di RevoU! Dapatkan skill digital paling in-demand langsung dari praktisi terbaik di bidangnya. Kelas online 100% LIVE, 1:1 career coaching, dan akses ke Community Hub dengan 6000+ member selamanya untuk support perkembangan karir kamu!
DAFTAR FULL PROGRAMCOBA COURSE GRATIS

Overview

SQL injection adalah teknik peretasan database yang dilakukan dengan memanipulasi query untuk mengakses data tanpa izin. Pahami cara kerja dan cara mencegahnya di artikel ini.

Kita sudah tidak asing lagi dengan penggunaan aplikasi atau website untuk melakukan task atau mencari informasi tertentu. 

Sebagai contoh, apabila kamu menggunakan sebuah website, maka kamu akan mengetikkan kata kunci ataupun URL ke address bar. Coba perhatikan alamat URL website ketika halaman tersebut mengembalikan data yang kamu cari. Apakah URL tersebut menunjukkan tampilan yang kurang lebih seperti gambar berikut ini: 

Pada contoh gambar di atas, kita mengakses website www.example.com, lalu yang kita lakukan sesungguhnya memasukkan parameter agar website tersebut mencari data sesuai dengan parameter yang kita tentukan. 

Di balik halaman yang kita cari, website tersebut akan menghasilkan parameter query sebagai berikut: 

SELECT * FROM users WHERE userid = 12345

userid 12345 merupakan angka yang kita ketikkan ketika ingin mencari data. Apakah kamu menyadari bentuk penulisan di atas? Bentuk tersebut merupakan klausa pencarian data pada database dengan metode SELECT

Jadi ketika kita ingin sebuah website mengeluarkan data yang kita inginkan, maka sesungguhnya yang terjadi adalah website tersebut membuatkan automatic query untuk menuliskan perintah SQL dan menambahkan angka parameter yang kita tuliskan untuk dicari pada database

Coba dibayangkan apabila kita sebagai orang luar yang bukan merupakan pemilik website tersebut, dapat mencari data dengan mudah dengan hanya mengetikkan userid. Apalagi bentuk penulisan userid tersebut merupakan bentuk yang mudah untuk ditiru seperti 12345 ataupun merupakan angka dengan jumlah digit yang sedikit. 

Apabila disalahgunakan, maka banyak orang tidak bertanggung jawab yang dapat mengakses data yang bersifat rahasia dan dapat menyalahgunakan data tersebut.

Untuk memahami lebih jauh, mari berkenalan dengan istilah SQL injection atau SQLi.

Apa itu SQL Injection (SQLi)?

Dikutip dari Geeks For Geeks, SQL injection merupakan salah satu teknik peretasan yang digunakan untuk memasukkan sebuah parameter pada website ataupun sebuah statement query secara sengaja dengan tujuan untuk mendapatkan data user. Teknik SQL injection ini sebagian besar digunakan untuk tujuan yang tidak baik, dan beberapa dampak yang diberikan dapat berupa:

  • Kerusakan pada database: Dikarenakan orang dapat dengan mudah memodifikasi database ataupun merusak data yang ada di dalamnya hanya dengan menggunakan statement SQL.
  • Perubahan pada data: SQL memiliki beberapa query yang berupa DML (Data Manipulation Language), dan orang yang tidak bertanggung jawab dapat mengetikkan query ini untuk mengubah data dalam database.

SQL injection ini banyak dipakai oleh sekelompok orang yang sering disebut sebagai peretas, atau dalam bidang keilmuan komputer, mereka dapat disebut sebagai hacker atau cracker. Terdapat perdebatan mengenai definisi antara hacker maupun cracker ini, namun kedua istilah ini sering didefinisikan sebagai berikut: 

  • Hacker 

Merupakan orang yang memiliki kemampuan untuk meretas atau mengakses sebuah sistem (hacking) dengan tujuan baik untuk mencari insight baru dari aplikasi yang diretas.

Biasanya tujuan dari hacker ini adalah untuk mencari titik lemah dalam aplikasi tersebut, sehingga pemilik aplikasi tersebut dapat mengantisipasi titik lemah sistem tersebut dan dapat memperbaikinya. 

Hacker biasanya bersifat tidak merusak baik sistem ataupun data, dan biasanya bertujuan untuk membantu pemilik sistem atau aplikasi untuk mencari tahu kelemahan dari sistem yang dimilikinya. 

  • Cracker 

Sama seperti hacker, cracker memiliki kemampuan untuk meretas atau mengakses sebuah sistem (hacking). Cracker biasanya memiliki tujuan yang tidak baik dan bersifat merusak sistem ataupun data, ataupun mencuri data yang dimiliki oleh pemilik aplikasi ataupun database

Seorang cracker biasanya merebut akses tanpa izin, dan mereka melakukan aksinya secara diam-diam sehingga sulit terdeteksi. Dengan mem-bypass (melewati) keamanan dan password, maka seorang cracker dapat dengan mudah mendapatkan data-data yang sifatnya personal, contohnya seperti PIN pada bank ataupun data saldo rekening.

Bagaimana Cara Kerja SQL Injection?

Pada dasarnya, SQL injection ini bekerja dengan memasukkan perintah atau query SQL untuk mendapatkan data. Sebagai contoh, setiap murid dalam suatu sekolah hanya memiliki akses data sesuai dengan student ID milik masing-masing. 

Ketika seorang murid memasukan data student ID-nya, maka web-server akan mengambil data dengan mengirimkan perintah SQL ke database untuk mengembalikan data sesuai dengan parameter yang diketik oleh murid tersebut. 

Perhatikan contoh query berikut ini apabila murid tersebut mengetikkan sebuah parameter 12345 or 1=1

SELECT * FROM STUDENT
WHERE STUDENT_ID = 12345 or 1=1

Sistem akan menerjemahkan input dari murid tersebut menjadi query seperti di atas. Apa arti dari 1=1? Dalam pemrograman baik menggunakan SQL atau Python, kita sering melihat bentuk seperti 1=1 atau ini dapat diartikan sebagai kondisi TRUE (penjelasan singkat ini dapat dilihat pada artikel Python - IF condition). 

Ketika seseorang mengetikkan perintah 1=1 pada SQL, hal ini berarti bahwa klausa SELECT tersebut akan mengembalikan semua data yang bersifat TRUE, karena nilai 1 atau TRUE ini pasti akan (=) bersifat 1 atau TRUE

Kita mengetahui bahwa dalam klausa WHERE dengan 2 atau lebih kondisi yang memiliki operator OR, maka apabila salah satu klausa bersifat TRUE, maka query tersebut akan dijalankan. 

Walaupun nilai 12345 mungkin tidak ada pada database, namun dengan teknik ini, maka seluruh nilai sudah pasti akan ditampilkan karena 1=1 sudah pasti bernilai TRUE.

{{COMPONENT_IDENTIFIER}}

Perhatikan contoh lain berikut ini. Apabila ada sebuah website ataupun aplikasi yang mengharuskan pengguna untuk memasukan sebuah username dan password, maka web-server secara tidak langsung akan menerjemahkan perintah tersebut seperti ini: 

SELECT * FROM USER
WHERE USERNAME = “<parameter>” AND PASSWORD = “<parameter>”

Pada contoh di atas, kita memiliki 2 buah input, yaitu username dan password. Seorang peretas dapat mendapatkan seluruh informasi dengan menggunakan cara yang sama, yaitu menggunakan 1=1 untuk mendapatkan seluruh informasi walaupun ada 2 input dan memiliki kondisi AND pada klausa WHERE-nya. 

Perhatikan contoh query berikut apabila peretas memasukan 1=1 pada input parameternya: 

SELECT * FROM USER
WHERE (USERNAME = “” or 1=1) AND (PASSWORD = “” or 1=1)

Dengan memanipulasi sedikit query di atas, maka seorang peretas dapat mengambil data yang bersifat rahasia. Apabila kita perhatikan query di atas, nilai 1=1 sudah pasti bernilai TRUE, walaupun ada 2 input dengan klausa WHERE dan operator AND yang membutuhkan kedua input bernilai TRUE

Pada input pertama yaitu username, nilainya sudah pasti TRUE karena walaupun nilai “” ini tidak bernilai tapi karena sifat operator OR di mana apabila salah satu input username bersifat TRUE (1=1), maka nilai tersebut sudah pasti TRUE

Hal yang sama juga terjadi pada input password, walaupun pada input password nilai “” tidak bernilai, tapi karena ada TRUE (1=1) maka input kedua pun bernilai TRUE. Karena kedua input bersifat TRUE, maka query tersebut setara dengan: 

SELECT * FROM USER
WHERE TRUE AND TRUE

atau

SELECT * FROM USER

Ketika 1=1 diketikkan pada kedua input, maka dengan pintarnya seorang peretas dapat mendapatkan seluruh data yang sifatnya privasi.

Bagaimana Cara Mencegah SQL Injection?

#1 Memisah database

Pada zaman sekarang ini, sebuah perusahaan ataupun startup memiliki 2 jenis database, yaitu backend database server dan data team database server. Pemilihannya tergantung dengan jenis ukuran perusahaan dan kemampuan perusahaan untuk me-manage kedua database ini. 

Database yang berada pada tim backend biasanya digunakan untuk pencatatan sementara, yang nantinya seluruh data pada database ini akan dimasukkan pada data team database yang lain, lalu database backend ini akan dikosongkan. 

Dengan adanya sistem seperti ini, maka walaupun ada orang yang bisa meretas database, maka mereka tidak akan mendapatkan data apapun karena backend database-nya kosong, karena sudah dipindah ke database lainnya. 

#2 Membatasi jumlah karakter untuk memasukkan parameter

Programmer juga bisa membatasi jumlah karakter pada saat memasukkan parameter pada website. Misalkan sebuah userid sudah ditentukan hanya memiliki 8 karakter, sehingga tidak ada orang yang bisa memasukkan karakter kurang atau lebih dari 8. Ini dapat mencegah terjadinya SQL injection yang tidak diinginkan. 

#3 Membatasi jumlah output data

Selain itu, seorang programmer juga dapat membatasi jumlah output data yang dihasilkan ketika mereka melakukan SQL injection. Hal ini mencegah seseorang untuk mendapatkan lebih dari 1 (atau jumlahnya dapat ditentukan oleh programmer) data dan dengan ini, seluruh data tidak akan ditampilkan pada website

#4 Menjaga akun system administrator secara ketat

Seorang programmer atau perancang sistem website pasti memiliki sebuah akun yang sifatnya master atau biasa dikenal dengan system administrator yang memiliki seluruh kuasa atas seluruh sistem. 

Apabila akun ini digunakan, maka tidak ada batasan yang dimiliki seseorang untuk mengakses sistem aplikasi maupun data pada aplikasi tersebut. Oleh karena itu, system administrator ini harus dijaga dengan baik sehingga tidak jatuh ke tangan orang yang tidak bertanggung jawab.

#5 Mengatur format khusus untuk mencegah peretasan 

Ada parameter input tertentu yang biasanya dimasukkan seseorang saat mencoba melakukan SQL injection, seperti ‘1=1’ pada bahasan kita sebelumnya. Mengatur format khusus ketika ada parameter input tersebut bisa mencegah upaya SQL injection

SQL injection merupakan hal yang dilakukan pastinya oleh orang yang memiliki kemampuan dalam computer programming, sehingga umumnya pasti memahami cara kerja programming. Seorang programmer aplikasi dapat menentukan misalnya apabila ‘1=1’ dimasukkan sebagai parameter, maka otomatis parameter tersebut dapat ditolak.

Pilihan lainnya, parameter tersebut bisa diubah bentuknya ke bentuk lain sehingga klausa WHERE tersebut tidak bernilai TRUE. Modifikasi jenis parameter ini dikenal juga dengan metode SQL Escape String, yaitu memodifikasi parameter tertentu untuk mencegah parameter tersebut masuk ke dalam database.

#6 Mengubah format parameter menjadi tipe data tertentu

Mengubah format parameter input menjadi jenis tipe data tertentu atau statement tertentu. Teknik ini merupakan yang paling mudah untuk digunakan. Apabila seorang programmer sudah menentukan bahwa seluruh input akan dijadikan sebuah tipe data STRING, maka ketika ada input 1=1 maka statement query akan menjadi seperti berikut ini: 

SELECT * FROM USER
WHERE (USERNAME = “revoupedia or 1=1”) AND (PASSWORD = “12345 or 1=1”)

Statement tersebut akan membaca username sebagai “revoupedia or 1=1” dan bukan membaca username sebagai “revoupedia” dan “1=1”. Hal ini akan membuat error pada kedua klausa WHERE karena tidak mungkin sebuah username berbentuk seperti “revoupedia or 1=1” dan tidak mungkin ada orang yang membuat username dengan bentuk seperti itu. 

Teknik ini pun dapat dilanjutkan dengan menambahkan ketentuan seperti melarang beberapa jenis simbol atau karakter yang tidak diperbolehkan dalam sebuah input, seperti: “*,?#@$%^& ” sehingga SQL injection dapat dicegah.

Bobby Christian
Bobby is a BI Analyst at FnB company. Is an enthusiast in the Data Industry, having some experience in Data Scientist, Data Engineer, and BI Analyst.

Artikel Lainnya

Mau belajar

Data Analytics

?

Belajar di RevoU! Dapatkan skill digital paling in-demand langsung dari praktisi terbaik di bidangnya. Kelas online 100% LIVE, 1:1 career coaching, dan akses ke Community Hub dengan 6000+ member selamanya untuk support perkembangan karir kamu!
Menu

Mulai karirmu dalam

Data Analytics

Belajar di RevoU! Dapatkan skill digital paling in-demand langsung dari praktisi terbaik di bidangnya. Kelas online 100% LIVE, 1:1 career coaching, dan akses ke Community Hub dengan 6000+ member selamanya untuk support perkembangan karir kamu!

Mau Belajar

Data Analytics

?

Belajar di RevoU! Dapatkan skill digital paling in-demand langsung dari praktisi terbaik di bidangnya. Kelas online 100% LIVE, 1:1 career coaching, dan akses ke Community Hub dengan 6000+ member selamanya untuk support perkembangan karir kamu!

DAFTAR FULL PROGRAM

Mau Belajar

Data Analytics

?