Seringkali saya menjumpai developer menggunakan string concatenation seperti ini untuk melakukan query ke database.
conn.Open();
using(var cmd = conn.CreateCommand())
{
cmd.CommandText = "select * from employee where kode='" + txtUserName.Text + "'";
var reader = cmd.ExecuteReader();
if(reader.Read())
{
//bla bla bla
}
}
Sebenarnya code di atas punya celah keamanan yang kurang baik, yaitu sangat rentan dengan serangan SQL Injection. Selain itu code di atas tidak dapat menerima input pada txtUserName.Text yang mengandung single quote.
Saya tidak akan membahas lebih detail tentang SQL Injection di sini, melainkan saya mengajukan solusi untuk menghindari penggunaan string concatenation seperti contoh di atas, yaitu dengan menggunakan ADO.NET Parameter.
Keuntungan penggunaan ADO.NET Parameter ini adalah:
1. Code yang kita tulis terbebas dari celah keamanan SQL Injection
2. Input parameter dapat berupa teks yang mengandung single quote (‘) maupun double quote(“).
Cara penggunaan ADO.NET Parameter, adalah dengan menggunakan collection property Parameters dari object Command.
Berikut contoh di atas yang ditulis ulang dengan menggunakan ADO.NET Parameter:
conn.Open();
using(var cmd = conn.CreateCommand())
{
cmd.CommandText = "select * from employee where kode=@kodeuser";
cmd.Parameters.AddWithValue("@kodeuser", txtUserName.Text);
var reader = cmd.ExecuteReader();
if(reader.Read())
{
// bla bla bla
}
}
Perhatikan penggunaan method AddWithValue pada contoh di atas:
- Parameter pertama dari method tersebut adalah nama parameter yang digunakan di dalam query SQL, dan parameter kedua adalah value yang ingin diberikan ke dalam query.
- Setiap parameter di dalam query menggunakan prefix @
Kita dapat memberikan lebih dari 1 parameter dalam sebuah query, asalkan semua nama parameter diawali dengan simbol @.
No comments:
Post a Comment