Penyusun string koneksi
Dalam versi awal ADO.NET, pemeriksaan waktu kompilasi string koneksi dengan nilai string yang digabungkan tidak terjadi, sehingga pada waktu proses, 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.
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 memberikan pengecualian. Selain itu, nilai yang dimasukkan ditangani dengan cara yang aman.
Contoh berikut menunjukkan cara SqlConnectionStringBuilder menangani nilai tambahan yang disisipkan untuk Initial Catalog
pengaturan.
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);
Penting
Microsoft menyarankan agar Anda menggunakan alur autentikasi paling aman yang tersedia. Jika Anda menyambungkan ke Azure SQL, Identitas Terkelola untuk sumber daya Azure adalah metode autentikasi yang direkomendasikan.
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.
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.