Apakah ini merupakan praktik yang baik mengatur string koneksi dalam konfigurasi web?

14

Baru-baru ini saya berdiskusi dengan beberapa kolega saya di tempat kerja saya karena mereka mengatakan bahwa sebaiknya ada .DLL koneksi string terenkripsi. Dan saya katakan mengapa tidak menggunakan koneksi string yang didefinisikan dalam web.config terenkripsi? itu sama dan lebih baik karena kerangka kerja entitas, misalnya mencari nama koneksi di konfigurasi web aplikasi, Sekarang saya ingin tahu dari titik keamanan apa yang lebih baik atau apa praktik terbaik ??

Jorge
sumber
2
Tentu saja, Anda bisa menjalankan aplikasi sebagai pengguna domain dan hanya mengizinkan pengguna itu untuk mengakses database. Kemudian mereka membutuhkan akses ke LDAP untuk masuk ke basis data Anda.
pdr
@ pdr: string koneksi masih akan mengungkapkan beberapa info yang Anda pilih untuk tidak diungkapkan jika server web dikompromikan, misalnya nama server basis data dan nama basis data.
Carson63000

Jawaban:

18

Tidak ada perbedaan substantif, kecuali bahwa Anda harus benar-benar membangun biner jika Anda ingin membuat perubahan konfigurasi jika Anda memasukkannya ke dalam DLL, sedangkan admin hanya dapat memodifikasi konfigurasi dengan alat off-the-shelf yang dipahami dengan baik. jika ada di konfigurasi. Sudah ada mekanisme untuk mengenkripsi string konfigurasi dan panduan tambahan tentang MSDN . Versi Asp.Net saat ini mungkin memiliki mekanisme alternatif, jadi lakukan riset tambahan sebelum melakukan pendekatan.

Hanya karena ada sesuatu yang duduk di DLL, tidak membuatnya lebih aman. Editor teks dapat membuka file biner juga, alat-alat seperti Reflector dapat menyediakan antarmuka yang lebih baik untuk menavigasi .Net DLL; DLL tidak akan memberikan enkripsi "ekstra".

Jason True
sumber
Tes adalah biner, biner adalah angka, jika seseorang dapat membaca angka 1 dan 0, keamanan fisik dan perangkat lunak Anda telah gagal.
Ramhound
12

Tidak masalah di mana data terenkripsi disimpan, itu penting bagaimana itu dienkripsi.

Bagian yang dienkripsi dalam web.config biasanya dienkripsi dengan API Perlindungan Data , yang sangat sulit untuk diretas tanpa mengorbankan seluruh mesin. Anda juga dapat menggunakan wadah kunci RSA, yang serupa (sulit untuk mengeluarkannya dari mesin).

Jika Anda ingin menyimpan string terenkripsi di DLL, tidak apa-apa, saya kira, meskipun itu secara inheren tidak lebih aman daripada web.config terenkripsi (siapa pun dapat mengintip ke dalam DLL dengan Reflector ), dan jelas lebih sulit untuk berubah (Anda harus mengkompilasi ulang). Tetapi sekali lagi, yang jauh lebih penting adalah bagaimana string terenkripsi itu dihasilkan; mungkin Anda tidak menggunakan penyedia yang sama seperti yang Anda lakukan untuk web.config terenkripsi, jadi apa yang Anda gunakan?

Skema enkripsi hanya sekuat kunci pribadi atau rahasia bersama. Jika kunci itu juga disimpan dalam rakitan Anda, maka Anda mungkin juga tidak memiliki enkripsi sama sekali. Jika itu disimpan di beberapa database eksternal, maka menimbulkan pertanyaan bagaimana yang database connection string dijamin. Ini benar-benar hanya dapat menyebabkan keamanan yang lebih lemah secara keseluruhan.

Di sisi lain, jika Anda adalah penyedia layanan dan string koneksi dienkripsi dengan kata sandi pengguna , maka itu akan lebih aman daripada menggunakan kunci mesin statis. Kemudian lagi, jika Anda menggunakan kata sandi pengguna untuk mengenkripsi, sangat tidak mungkin bahwa Anda akan meng-coding data terenkripsi dalam perakitan Anda, karena itu perlu dibuat dan disimpan sebagai respons terhadap tindakan pengguna (bukan pengembang).

Sungguh saya tidak bisa memikirkan terlalu banyak situasi di mana pengkodean yang sulit (dienkripsi) string koneksi di DLL lebih aman daripada mengenkripsi bagian web.config yang relevan. Paling-paling itu hanya menambah ketidaknyamanan, paling buruk itu bergantung pada beberapa keamanan kebiasaan yang ditulis dengan canggung yang dilubangi lubang. Bantulah diri Anda sendiri dan lakukan apa yang direkomendasikan oleh Microsoft - cukup enkripsi web.config Anda jika ada data sensitif di sana.

Aaronaught
sumber
2

Praktik terbaik untuk ASP.NET adalah meletakkan semua konfigurasi / pengaturan dalam file web.config atau file app.config (untuk jenis proyek lainnya).

Tentang enkripsi dan alasan menggunakannya pada string koneksi Anda harus menjadi kasus yang sangat istimewa. Karena kebanyakan kasus hingga 99% Anda tidak perlu mengenkripsi string koneksi Anda. Aplikasi perusahaan Microsoft sendiri memiliki string koneksi yang terbuka di file web.config / app.config. Saya pikir Anda terlalu mempersulit keamanan.

Satu hal lagi, mengkodekan string koneksi Anda adalah praktik yang buruk. Misalnya, jangan menaruh string koneksi (alias connectionstring) dalam DLL atau .aspx / .ascx / .cshtml atau kode-belakang.

William Chang
sumber
1
Anda seharusnya tidak pernah memiliki kata sandi dalam teks yang jelas dalam file konfigurasi. Hanya karena itu adalah aplikasi perusahaan di balik firewall tidak berarti itu aman dan Anda dapat melupakan keamanan.
Ryan M