Bir web yapılandırmada bağlantı dizeleri ayarlamak iyi bir uygulama mı?


14

Son zamanlarda işimde bazı meslektaşlarım ile bir tartışma var, çünkü bir .DLL'de şifrelenmiş bir dize bağlantısı daha iyi olduğunu söyledi. Ve neden sadece şifrelenmiş web.config içinde tanımlanan dize bağlantısını kullanmadım dedim? aynı ve daha iyi çünkü varlık çerçeve, örneğin uygulamanın web yapılandırma bağlantı adını arar, Şimdi bir güvenlik noktasından daha iyi veya en iyi uygulama nedir bilmek istiyorum ??


2
Tabii ki, uygulamanın sadece bir etki alanı kullanıcısı olarak çalışmasını sağlayabilir ve yalnızca kullanıcının veritabanına erişmesine izin verebilirsiniz. Sonra veritabanınıza girmek için LDAP erişimi gerekir.
pdr

@pdr: bağlantı dizesi, web sunucusunun güvenliği ihlal edilmişse (örneğin veritabanı sunucusunun adı ve veritabanının adı) açığa vurulmamasını tercih ettiğiniz bazı bilgileri gösterir.
Carson63000

Yanıtlar:


18

Önemli bir fark yoktur, ancak bir DLL'e koyarsanız bir yapılandırma değişikliği yapmak istiyorsanız gerçekten bir ikili dosya oluşturmanız gerekir, ancak bir yönetici yapılandırmayı iyi anlaşılmış hazır araçlarla değiştirebilir yapılandırmada ise. MSDN'de yapılandırma dizelerini ve ek rehberliği şifrelemek için zaten bir mekanizma var . Asp.Net'in mevcut sürümleri alternatif mekanizmalara sahip olabilir, bu yüzden bir yaklaşıma başlamadan önce bazı ek araştırmalar yapın.

Bir şey bir DLL dosyasında oturuyor olduğundan, onu daha güvenli hale getirmez. Bir metin düzenleyici ikili dosyaları da açabilir, Reflector gibi araçlar .Net DLL'de gezinmek için daha hoş bir arayüz sağlayabilir; bir DLL "ekstra" şifreleme sağlamaz.


Test ikili, ikili sayıdır, eğer birisi 1'leri ve 0'ları okuyabilirse, fiziksel ve yazılım güvenliğiniz başarısız olmuştur.
Ramhound

12

Fark etmez nerede şifreli verilerin depolandığı konularda, nasıl şifreli.

Bir web.config dosyasındaki şifreli bölümler normalde tüm makineden ödün vermeden kırılması son derece zor olan Veri Koruma API'sı ile şifrelenir . Ayrıca benzer bir RSA anahtar kabı da kullanabilirsiniz (bunları makineden çıkarmak zor).

Şifrelenmiş dizeyi DLL'de saklamak istiyorsanız, herhalde, şifrelenmiş bir web.config'den (herkes Reflektör ile bu DLL'ye göz atabilir) daha güvenli olmasa da , değiştirmek zor ( sanırım ) derlemek gerekir). Ama yine, çok daha önemli olan, şifrelenmiş dizenin nasıl üretildiğidir; muhtemelen şifreli bir web.config için aynı sağlayıcıları kullanmıyorsunuz, o zaman ne kullanıyorsunuz?

Şifreleme düzeni yalnızca özel anahtar veya paylaşılan sır kadar güçlüdür. Bu anahtar aynı zamanda derlemenizde de depolanıyorsa, hiç şifrelemeniz de olmayabilir. Bazı harici veritabanlarında depolanıyorsa, o veritabanının bağlantı dizesinin nasıl güvenli olduğu sorusunu gündeme getirir . Bu gerçekten sadece genel olarak daha zayıf güvenliğe yol açabilir.

Öte yandan, bir servis sağlayıcıysanız ve bağlantı dizesi bir kullanıcı parolasıyla şifrelenmişse , bu statik bir makine anahtarı kullanmaktan daha güvenli olacaktır . Daha sonra, şifrelemek için kullanıcı parolaları kullanıyorsanız, kullanıcı (geliştirici değil) eylemine yanıt olarak oluşturulması ve depolanması gerektiğinden, montajınızdaki şifreli verileri sabit olarak kodlamanız pek olası değildir.

Gerçekten DLL'de (şifreli) bağlantı dizesini kodlamanın ilgili web.config bölümünü şifrelemekten daha güvenli olduğu çok fazla durum düşünemiyorum. En iyi ihtimalle sadece rahatsızlık katıyor, en kötüsü deliklerle dolu bazı beceriksizce yazılmış özel güvenliklere dayanıyor. Kendinize bir iyilik yapın ve Microsoft'un önerdiklerini yapın - orada hassas veriler varsa web.config dosyanızı şifreleyin.


2

ASP.NET için en iyi uygulama tüm yapılandırmaları / ayarları web.config dosyasına veya app.config dosyasına (diğer proje türleri için) koymaktır.

Şifreleme ve bağlantı dizelerinizde kullanma nedeninin çok özel bir durum olması gerekir. Çünkü çoğu durumda% 99'a kadar bağlantı dizelerinizi şifrelemeniz gerekmez. Microsoft kendi kurumsal uygulamalarının bağlantı dizeleri web.config / app.config dosyasında görüntülenir. Bence güvenliği fazlasıyla zorlaştırıyorsun.

Bir şey daha, bağlantı dizelerinizi zor kodlamak kötü bir uygulamadır. Örneğin, bir DLL veya .aspx / .ascx / .cshtml veya kod arkasına herhangi bir bağlantı dizesi (aka connectionstring) koymayın.


1
Bir yapılandırma dosyasında asla açık metin olarak bir parolanız olmamalıdır. Güvenlik duvarlarının arkasında kurumsal bir uygulama olması, güvenli olduğu ve güvenliği unutabileceğiniz anlamına gelmez.
Ryan M
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.