Mencegah SQL Injection Dengan Parameterized Query Pada EF Core

1 Mei 2024

SQL Injection merupakan salah satu ancaman untuk aplikasi dan database kita. Ancaman ini merupakan proses untuk memasukkan kode yang berbahaya pada perintah SQL yang dijalankan di database aplikasi.

Ketika kawan-kawan menggunakan EF Core untuk berinteraksi dengan database aplikasi, SQL Injection dapat terjadi apabila kita tidak hati-hati dalam mengembangkan aplikasi kita. Nah, salah satu best practices untuk mencegah terjadinya SQL Injection ketika kita menggunakan EF Core, kita bisa menggunakan parameterized query untuk melindungi database.

Parameterized Query

Parameterized Query konsepnya sederhana namun powerful untuk melindungi database. Ketika kawan-kawan melakukan query ke database, kawan-kawan hanya perlu membuat variable untuk membungkus value pencarian sebelum menggabungkannya dengan perintah untuk database. EF Core akan menerjemahkan variable tadi menjadi parameterized query di SQL.

Contoh di bawah ini merupakan parameterized query karena menggunakan variable untuk menyimpan value pencarian yaitu Sudarmono.

var name = "Sudarmono"; // value pencarian
var hasilPencarian = _context.Siswa.Where(i => i.FirstName == name).ToList(); // menggunakan variable name pada perintah Where

Kode di atas akan diterjemahkan menjadi perintah SQL yang mempunyai parameter.

DECLARE @P1 NVARCHAR(4000);
SET @P1 = 'Sudarmono';
SELECT * FROM Siswa WHERE Siswa.FirstName = @P1;

Sebagai perbandingan, contoh di bawah ini tidak menggunakan parameterized query. Value pencarian langsung dimasukkan ke dalam perintah Where.

// tanpa parameterized query
var hasilPencarian = _context.Siswa.Where(i => i.FirstName == "Sudarmono").ToList();

Kemudian, perintah SQL akan menjadi seperti berikut.

SELECT * FROM Siswa WHERE Siswa.FirstName = 'Sudarmono';

Tanpa menggunakan parameterized query, perintah SQL kita menjadi rawan untuk SQL Injection. Kode yang berbahaya dapat dimasukkan ke perintah SQL yang dapat membahayakan data-data pada aplikasi kita. Value pencarian ‘Sudarmono’ dapat diganti dengan kode berbahaya dengan mudah apabila kita tidak menggunakan parameterized query.

Sangat mudah kan untuk membuat database kita lebih aman ketika kita menggunakan EF Core. Semoga bermanfaat untuk kawan-kawan semua.

Suka konten ini? ❤️ Dukung DevKage melalui Saweria.