Penyusun string koneksi
Berlaku untuk: .NET Framework .NET .NET Standard
Dalam versi ADO.NET sebelumnya, pemeriksaan waktu kompilasi string koneksi dengan nilai string yang digabungkan tidak terjadi, sehingga pada waktu proses, kata kunci yang salah menghasilkan ArgumentException. Penyedia Data Microsoft SqlClient untuk SQL Server menyertakan kelas Microsoft.Data.SqlClient.SqlConnectionStringBuilder penyusun string koneksi yang mewarisi dari DbConnectionStringBuilder.
Serangan injeksi string koneksi
Serangan injeksi string koneksi dapat terjadi saat penggabungan string dinamis digunakan untuk membangun string koneksi yang didasarkan pada input pengguna. Jika string tidak divalidasi dan teks atau karakter berbahaya tidak lolos, penyerang berpotensi mengakses data sensitif atau sumber daya lain di server. Misalnya, penyerang dapat memasang serangan dengan memasok titik koma dan menambahkan nilai lain. string koneksi diurai dengan menggunakan algoritma "terakhir menang", dan input bermusuhan diganti untuk nilai yang sah.
Kelas pembuat string koneksi dirancang untuk menghilangkan dugaan serta melindungi dari kesalahan sintaks dan kerentanan keamanan. Mereka menyediakan metode dan properti yang sesuai dengan pasangan kunci/nilai yang diketahui yang diizinkan oleh penyedia data. Setiap kelas mempertahankan kumpulan sinonim yang tetap dan dapat menerjemahkan dari sinonim ke nama kunci terkenal yang sesuai. Pemeriksaan dilakukan untuk pasangan kunci/nilai yang valid dan pasangan yang tidak valid memberikan pengecualian. Selain itu, nilai yang disuntikkan ditangani dengan cara yang aman.
Contoh berikut menunjukkan bagaimana SqlConnectionStringBuilder menangani nilai ekstra yang disisipkan untuk pengaturan Initial Catalog
.
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
builder.DataSource = "(local)";
builder.IntegratedSecurity = true;
builder.InitialCatalog = "AdventureWorks;NewValue=Bad";
Console.WriteLine(builder.ConnectionString);
Output menunjukkan bahwa ditangani SqlConnectionStringBuilder dengan benar dengan melarikan diri dari nilai tambahan dalam tanda kutip ganda alih-alih menambahkannya ke string koneksi sebagai pasangan kunci/nilai baru.
data source=(local);Integrated Security=True;
initial catalog="AdventureWorks;NewValue=Bad"
Membangun string koneksi dari file konfigurasi
Jika elemen tertentu dari string koneksi diketahui sebelumnya, elemen tersebut dapat disimpan dalam file konfigurasi dan diambil pada saat dijalankan untuk membuat string koneksi lengkap. Misalnya, nama database mungkin sudah diketahui sebelumnya, tetapi bukan nama servernya. Atau Anda mungkin ingin pengguna memberikan nama dan kata sandi pada waktu proses tanpa kemampuan untuk menyuntikkan nilai lain ke dalam string koneksi.
Salah satu konstruktor yang kelebihan beban untuk pembuat string koneksi menggunakan String sebagai argumen, yang memungkinkan Anda menyediakan string koneksi parsial yang kemudian dapat diselesaikan dari input pengguna. String koneksi parsial dapat disimpan dalam file konfigurasi dan diambil pada saat runtime.
Catatan
Namespace System.Configuration memungkinkan akses terprogram ke file konfigurasi yang menggunakan WebConfigurationManager untuk aplikasi Web dan ConfigurationManager untuk aplikasi Windows. Untuk informasi selengkapnya tentang bekerja dengan string koneksi dan file konfigurasi, lihat String Koneksi dan File Konfigurasi.
Contoh
Contoh ini menunjukkan pengambilan string koneksi parsial dari file konfigurasi dan menyelesaikannya dengan mengatur properti DataSource, UserID, dan Password dari SqlConnectionStringBuilder. File konfigurasi didefinisikan sebagai berikut.
<connectionStrings>
<clear/>
<add name="partialConnectString"
connectionString="Initial Catalog=Northwind;"
providerName="Microsoft.Data.SqlClient" />
</connectionStrings>
Catatan
Anda harus mengatur referensi ke System.Configuration.dll
di proyek Anda agar kode dapat dijalankan.
private static void BuildConnectionString(string dataSource,
string userName, string userPassword)
{
// Retrieve the partial connection string named databaseConnection
// from the application's app.config or web.config file.
ConnectionStringSettings settings =
ConfigurationManager.ConnectionStrings["partialConnectString"];
if (null != settings)
{
// Retrieve the partial connection string.
string connectString = settings.ConnectionString;
Console.WriteLine("Original: {0}", connectString);
// Create a new SqlConnectionStringBuilder based on the
// partial connection string retrieved from the config file.
SqlConnectionStringBuilder builder =
new SqlConnectionStringBuilder(connectString);
// Supply the additional values.
builder.DataSource = dataSource;
builder.UserID = userName;
builder.Password = userPassword;
Console.WriteLine("Modified: {0}", builder.ConnectionString);
}
}