Melindungi informasi koneksi
Berlaku untuk: .NET Framework .NET .NET Standard
Melindungi akses ke sumber data Anda adalah salah satu tujuan terpenting ketika mengamankan aplikasi. String koneksi menimbulkan potensi kerentanan jika tidak diamankan. Menyimpan informasi koneksi dalam teks biasa atau menyimpannya dalam memori berisiko membahayakan seluruh sistem Anda. String koneksi yang disematkan dalam kode sumber Anda dapat dibaca menggunakan Ildasm.exe (IL Disassembler) untuk melihat bahasa perantara Microsoft (Microsoft intermediate language atau MSIL) dalam rakitan yang dikompilasi.
Kerentanan keamanan yang melibatkan string koneksi dapat muncul berdasarkan jenis autentikasi yang digunakan, bagaimana string koneksi disimpan dalam memori dan pada disk, dan teknik yang digunakan untuk membuatnya pada durasi.
Menggunakan autentikasi Windows
Untuk membantu membatasi akses ke sumber data, Anda harus mengamankan informasi koneksi seperti ID pengguna, kata sandi, dan nama sumber data. Untuk menghindari paparan informasi pengguna, kami sarankan sedapat mungkin menggunakan autentikasi Windows (kadang-kadang disebut sebagai keamanan terintegrasi). Autentikasi Windows ditentukan dalam string koneksi dengan menggunakan kata kunci Integrated Security
atau Trusted_Connection
, menghilangkan kebutuhan untuk menggunakan ID pengguna dan kata sandi. Saat menggunakan autentikasi Windows, pengguna diautentikasi oleh Windows, dan akses ke sumber daya server dan database ditentukan dengan memberikan izin kepada pengguna dan grup Windows.
Untuk situasi di mana tidak memungkinkan untuk menggunakan autentikasi Windows, Anda harus menggunakan dengan sangat berhati-hati karena kredensial pengguna terpapar dalam string koneksi. Dalam aplikasi ASP.NET, Anda dapat mengonfigurasi akun Windows sebagai identitas tetap yang digunakan untuk menyambungkan ke database dan sumber daya jaringan lainnya. Anda mengaktifkan peniruan identitas dalam elemen identitas dalam file web.config dan menentukan nama pengguna dan kata sandi.
<identity impersonate="true"
userName="MyDomain\UserAccount"
password="*****" />
Akun identitas tetap harus merupakan akun hak istimewa rendah yang telah diberikan hanya izin yang diperlukan dalam database. Selain itu, Anda harus mengenkripsi file konfigurasi sehingga nama pengguna dan kata sandi tidak terekspos dalam teks yang jelas.
Hindari serangan injeksi dengan penyusun string koneksi
Serangan injeksi string koneksi dapat terjadi saat penggabungan string dinamis digunakan untuk membangun string koneksi berdasarkan pada input pengguna. Jika input pengguna tidak divalidasi dan teks atau karakter berbahaya tidak lolos, penyerang berpotensi dapat mengakses data sensitif atau sumber daya lain di server. Untuk mengatasi masalah ini, Penyedia Data Microsoft SqlClient untuk SQL Server memperkenalkan kelas penyusun string koneksi baru untuk memvalidasi sintaks string koneksi dan memastikan bahwa parameter tambahan tidak diperkenalkan. Untuk informasi selengkapnya, lihat Pembuat String Koneksi.
Gunakan "Persist Security Info=false"
Nilai default untuk Persist Security Info
adalah salah; kami sarankan menggunakan default ini di semua string koneksi. Mengatur Persist Security Info
ke true
atau yes
memungkinkan informasi yang sensitif-keamanan, termasuk ID pengguna dan kata sandi, diperoleh dari koneksi setelah koneksi dibuka. Ketika Persist Security Info
diatur ke false
atau no
, informasi keamanan dibuang setelah digunakan untuk membuka koneksi, memastikan bahwa sumber yang tidak tepercaya tidak memiliki akses ke informasi sensitif-keamanan.
Mengenkripsi file konfigurasi
Berlaku untuk: .NET Framework .NET Core .NET Standard
Anda juga bisa menyimpan string koneksi dalam file konfigurasi, yang menghilangkan kebutuhan untuk menyematkannya dalam kode aplikasi Anda. File konfigurasi adalah file XML standar yang rangkaian elemen umunya telah ditentukan oleh .NET Framework. String koneksi dalam file konfigurasi biasanya disimpan di dalam elemen < connectionStrings> di app.config untuk aplikasi Windows, atau file web.config untuk aplikasi ASP.NET. Untuk informasi selengkapnya tentang dasar-dasar menyimpan, mengambil, dan mengenkripsi string koneksi dari file konfigurasi, lihat String Koneksi dan File Konfigurasi.