NIM : 2402313890
String query = "SELECT * FROM products WHERE category = '"+ input + "'";
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(query);
Kode ini dapat dengan mudah ditulis ulang agar mencegah input pengguna mengganggu
struktur query:
Agar parameterized query efektif dalam mencegah SQL injection, string yang digunakan
dalam query harus selalu berupa konstanta hard-coded dan tidak boleh mengandung data
variabel dari asal apapun. Jangan tergoda untuk memutuskan kasus demi kasus apakah suatu
data dapat dipercaya, dan tetap menggunakan penggabungan string dalam query untuk
kasus yang dianggap aman. Sangat mudah untuk membuat kesalahan tentang asal data yang
mungkin, atau untuk perubahan dalam kode lain melanggar asumsi tentang data yang
tercemar.
4. Menonaktifkan Informasi Pesan Kesalahan (Error).
Salah satu kebiasaan yang kerap kali dilakukan oleh pengembang aplikasi pada saat
masa pengembangan adalah mengaktifkan mode debug guna memudahkan pengembang
dalam menemukan kesalahan dalam aplikasi yang dikembangkannya. Namun kerap kali
pengembang lupa untuk menon aktifkan mode debug pada saat aplikasi memasuki masa
penggunaan (production).
Sehingga hal ini kerap kali menjadi keuntungan bagi penyerang dengan teknik SQL
injection untuk mengetahui parameter URL mana yang rentan terhadap serangan ini.
Sehingga untuk menghindari hal ini, cukup non-aktifkan mode debug pada aplikasi untuk
mencegah pesan error yang ditampilkan dimanfaatkan oleh pihak penyerang.
5. Menambahkan Escape Karakter.
Tambahkan escape karaketer yang memiliki makna khusus di SQL. Misalkan karakter yang
memiliki memiliki makna khusus di SQL yakni single quote (‘) di dalam paramater dapat
diinterpretasikan sebagai dua single quotes (‘’). Maka untuk menghindari kesalahan eksekusi
dalam database, tambahkan karakter escape seperti back slash, misal (\’). Sehingga karakter
single quote akan tetap diartikan sebagai single quote oleh database.