Pembangun String Koneksi

Dalam versi ADO.NET sebelumnya, pemeriksaan waktu kompilasi dari string koneksi dengan nilai string yang digabungkan tidak terjadi, sehingga pada saat dijalankan, kata kunci yang salah menghasilkan ArgumentException. Setiap penyedia data .NET Framework mendukung sintaks yang berbeda untuk kata kunci string koneksi, yang membuat pembuatan string koneksi yang valid menjadi sulit jika dilakukan secara manual. Untuk mengatasi masalah ini, ADO.NET 2.0 memperkenalkan pembuat string koneksi baru untuk setiap penyedia data .NET Framework. Setiap penyedia data menyertakan kelas pembuat string koneksi yang diwarisi dari DbConnectionStringBuilder. Tabel berikut mencantumkan penyedia data .NET Framework dan kelas pembuat string koneksi terkait.

Penyedia Kelas ConnectionStringBuilder
System.Data.SqlClient System.Data.SqlClient.SqlConnectionStringBuilder
System.Data.OleDb System.Data.OleDb.OleDbConnectionStringBuilder
System.Data.Odbc System.Data.Odbc.OdbcConnectionStringBuilder
System.Data.OracleClient System.Data.OracleClient.OracleConnectionStringBuilder

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 dapat mengakses data sensitif atau sumber daya lain di server. Misalnya, penyerang dapat memasang serangan dengan memberikan titik koma dan menambahkan nilai tambahan. String koneksi diurai dengan menggunakan algoritma "yang terakhir akan menang", dan input yang tidak bersahabat diganti dengan nilai yang sah.

Kelas pembuat string koneksi dirancang untuk menghilangkan dugaan serta melindungi dari kesalahan sintaks dan kerentanan keamanan. Kelas ini menyediakan metode dan properti yang sesuai dengan pasangan kunci/nilai yang diketahui yang diizinkan oleh setiap 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 akan menampilkan pengecualian. Selain itu, nilai yang dimasukkan ditangani dengan cara yang aman.

Contoh berikut menunjukkan bagaimana SqlConnectionStringBuilder menangani nilai ekstra yang disisipkan untuk pengaturan Initial Catalog.

Dim builder As New System.Data.SqlClient.SqlConnectionStringBuilder  
builder("Data Source") = "(local)"  
builder("Integrated Security") = True  
builder("Initial Catalog") = "AdventureWorks;NewValue=Bad"  
Console.WriteLine(builder.ConnectionString)  
System.Data.SqlClient.SqlConnectionStringBuilder builder =  
  new System.Data.SqlClient.SqlConnectionStringBuilder();  
builder["Data Source"] = "(local)";  
builder["integrated Security"] = true;  
builder["Initial Catalog"] = "AdventureWorks;NewValue=Bad";  
Console.WriteLine(builder.ConnectionString);  

Output menunjukkan bahwa SqlConnectionStringBuilder menangani ini dengan benar dengan mengeluarkan nilai ekstra dalam tanda kutip ganda, bukan 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 saat dijalankan tanpa dapat memasukkan 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="System.Data.SqlClient" />  
</connectionStrings>  

Catatan

Anda harus mengatur referensi ke System.Configuration.dll di proyek Anda agar kode dapat dijalankan.

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 (settings != null)
    {
        // Retrieve the partial connection string.
        var 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(connectString)
            {
                // Supply the additional values.
                DataSource = dataSource,
                UserID = userName,
                Password = userPassword
            };
        Console.WriteLine("Modified: {0}", builder.ConnectionString);
    }
}
Private Sub BuildConnectionString(ByVal dataSource As String, _
    ByVal userName As String, ByVal userPassword As String)

    ' Retrieve the partial connection string named databaseConnection
    ' from the application's app.config or web.config file.
    Dim settings As ConnectionStringSettings = _
       ConfigurationManager.ConnectionStrings("partialConnectString")

    If Not settings Is Nothing Then
        ' Retrieve the partial connection string.
        Dim connectString As String = settings.ConnectionString
        Console.WriteLine("Original: {0}", connectString)

        ' Create a new SqlConnectionStringBuilder based on the
        ' partial connection string retrieved from the config file.
        Dim builder As New SqlConnectionStringBuilder(connectString)

        ' Supply the additional values.
        builder.DataSource = dataSource
        builder.UserID = userName
        builder.Password = userPassword

        Console.WriteLine("Modified: {0}", builder.ConnectionString)
    End If
End Sub

Lihat juga