Bağlantı Dizelerini ve Diğer Yapılandırma Bilgilerini Koruma (C#)
tarafından Scott Mitchell
ASP.NET uygulaması genellikle yapılandırma bilgilerini bir Web.config dosyasında depolar. Bu bilgilerin bazıları hassastır ve korumayı garanti eder. Varsayılan olarak bu dosya bir Web sitesi ziyaretçisine sunulmaz, ancak bir yönetici veya bilgisayar korsanı Web sunucusunun dosya sistemine erişim elde edebilir ve dosyanın içeriğini görüntüleyebilir. Bu öğreticide, ASP.NET 2.0'ın Web.config dosyasının bölümlerini şifreleyerek hassas bilgileri korumamıza olanak sağladığını öğreniriz.
Giriş
ASP.NET uygulamaları için yapılandırma bilgileri genellikle adlı Web.config
bir XML dosyasında depolanır. Bu öğreticiler boyunca birkaç kez güncelleştirdik Web.config
. Örneğin, ilk öğreticide Yazılan Veri Kümesi oluşturulurken Northwind
bağlantı dizesi bilgiler bölümüne otomatik olarak eklendi Web.config
<connectionStrings>
. Daha sonra, Ana Sayfalar ve Site Gezintisi öğreticisinde, projemizdeki tüm ASP.NET sayfalarının Temayı kullanması DataWebControls
gerektiğini belirten bir <pages>
öğe ekleyerek öğesini el ile güncelleştirdikWeb.config
.
Web.config
Bağlantı dizeleri gibi hassas veriler içerebileceğinden, içeriğinin Web.config
yetkisiz görüntüleyicilerden güvenli ve gizli tutulması önemlidir. Varsayılan olarak, uzantılı .config
bir dosyaya yapılan tüm HTTP istekleri, Şekil 1'de gösterilen Bu sayfa türü sunulmadı iletisini döndüren ASP.NET altyapısı tarafından işlenir. Bu, ziyaretçilerin yalnızca tarayıcılarının Adres çubuğuna girerek http://www.YourServer.com/Web.config dosyanızın Web.config
içeriğini görüntüleyemeyeceği anlamına gelir.
Şekil 1: Tarayıcı Aracılığıyla Ziyaret Etme Web.config
, Bu tür bir sayfaya hizmet verilmediğini döndürür İleti (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Peki ya bir saldırgan dosyanızın Web.config
içeriğini görüntülemesini sağlayan başka bir açık bulabilirse? Bir saldırgan bu bilgilerle ne yapabilir ve içindeki Web.config
hassas bilgileri daha fazla korumak için hangi adımlar atılabilir? Neyse ki içindeki bölümlerin Web.config
çoğu hassas bilgi içermez. Saldırgan, ASP.NET sayfalarınız tarafından kullanılan varsayılan Temanın adını biliyorsa ne gibi bir zarar verebilir?
Ancak bazı Web.config
bölümler bağlantı dizeleri, kullanıcı adları, parolalar, sunucu adları, şifreleme anahtarları vb. içerebilecek hassas bilgiler içerir. Bu bilgiler genellikle aşağıdaki Web.config
bölümlerde bulunur:
<appSettings>
<connectionStrings>
<identity>
<sessionState>
Bu öğreticide, bu tür hassas yapılandırma bilgilerini korumaya yönelik teknikleri inceleyeceğiz. Göreceğimiz gibi, .NET Framework sürüm 2.0, seçilen yapılandırma bölümlerini program aracılığıyla şifrelemeyi ve şifresini çözmeyi kolaylaştıran korumalı bir yapılandırma sistemi içerir.
Not
Bu öğretici, Microsoft'un bir ASP.NET uygulamasından veritabanına bağlanmaya yönelik önerilerine göz atarak sona erer. Bağlantı dizelerinizi şifrelemeye ek olarak, veritabanına güvenli bir şekilde bağlandığınızdan emin olarak sisteminizi sağlamlaştırmaya yardımcı olabilirsiniz.
1. Adım: ASP.NET 2.0 s Korumalı Yapılandırma Seçeneklerini Keşfetme
ASP.NET 2.0, yapılandırma bilgilerini şifrelemek ve şifresini çözmek için korumalı bir yapılandırma sistemi içerir. Bu, .NET Framework yapılandırma bilgilerini program aracılığıyla şifrelemek veya şifresini çözmek için kullanılabilecek yöntemleri içerir. Korumalı yapılandırma sistemi, geliştiricilerin hangi şifreleme uygulamasının kullanılacağını seçmesine olanak tanıyan sağlayıcı modelini kullanır.
.NET Framework iki korumalı yapılandırma sağlayıcısıyla birlikte sağlanır:
RSAProtectedConfigurationProvider
- şifreleme ve şifre çözme için asimetrik RSA algoritmasını kullanır.DPAPIProtectedConfigurationProvider
- şifreleme ve şifre çözme için Windows Veri Koruma API'sini (DPAPI) kullanır.
Korumalı yapılandırma sistemi sağlayıcı tasarım desenini uyguladığından, kendi korumalı yapılandırma sağlayıcınızı oluşturup uygulamanıza takmak mümkündür. Bu işlem hakkında daha fazla bilgi için bkz . Korumalı Yapılandırma Sağlayıcısı Uygulama .
RSA ve DPAPI sağlayıcıları şifreleme ve şifre çözme yordamları için anahtarları kullanır ve bu anahtarlar makine veya kullanıcı düzeyinde depolanabilir. Makine düzeyindeki anahtarlar, web uygulamasının kendi ayrılmış sunucusunda çalıştığı veya bir sunucuda şifrelenmiş bilgileri paylaşması gereken birden çok uygulama olup olmadığı senaryolar için idealdir. Kullanıcı düzeyi anahtarlar, aynı sunucudaki diğer uygulamaların uygulamanızın korumalı yapılandırma bölümlerinin şifresini çözememesi gereken paylaşılan barındırma ortamlarında daha güvenli bir seçenektir.
Bu öğreticide örneklerde DPAPI sağlayıcısı ve makine düzeyi anahtarları kullanılacaktır. Korumalı yapılandırma sistemi herhangi bir Web.config
bölümün <connectionStrings>
Web.config
çoğunu şifrelemek için kullanılabilse de bölümünde şifrelemeyi inceleyeceğiz. Kullanıcı düzeyinde anahtarları kullanma veya RSA sağlayıcısını kullanma hakkında bilgi için, bu öğreticinin sonundaki Diğer Okumalar bölümündeki kaynaklara bakın.
Not
RSAProtectedConfigurationProvider
ve DPAPIProtectedConfigurationProvider
sağlayıcıları, dosyaya machine.config
sırasıyla sağlayıcı adları RsaProtectedConfigurationProvider
ve DataProtectionConfigurationProvider
ile kaydedilir. Yapılandırma bilgilerini şifrelerken veya şifresini çözerken, gerçek tür adı ( ve DPAPIProtectedConfigurationProvider
) yerine uygun sağlayıcı adını (RsaProtectedConfigurationProvider
RSAProtectedConfigurationProvider
veya DataProtectionConfigurationProvider
) sağlamamız gerekir. Dosyayı $WINDOWS$\Microsoft.NET\Framework\version\CONFIG
klasörde bulabilirsinizmachine.config
.
2. Adım: Yapılandırma Bölümlerini Program Aracılığıyla Şifreleme ve Şifresini Çözme
Birkaç kod satırıyla, belirli bir sağlayıcıyı kullanarak belirli bir yapılandırma bölümünü şifreleyebilir veya şifresini çözebiliriz. Kısa bir süre sonra göreceğimiz gibi kodun uygun yapılandırma bölümüne program aracılığıyla başvurması, veya UnprotectSection
yöntemini çağırması ProtectSection
ve ardından değişiklikleri kalıcı hale getirmek için yöntemini çağırması Save
yeterlidir. Ayrıca, .NET Framework yapılandırma bilgilerini şifreleyebilen ve şifresini çözebilen yararlı bir komut satırı yardımcı programı içerir. 3. Adımda bu komut satırı yardımcı programını keşfedeceğiz.
Yapılandırma bilgilerinin program aracılığıyla korunduğunu göstermek için, içindeki bölümü Web.config
şifrelemeye ve şifresini çözmeye <connectionStrings>
yönelik düğmeler içeren bir ASP.NET sayfası oluşturalım.
Klasördeki AdvancedDAL
sayfayı EncryptingConfigSections.aspx
açarak başlayın. Bir TextBox denetimini Araç Kutusu'ndan Tasarım Aracı sürükleyin, özelliğini WebConfigContents
MultiLine
TextMode
Width
olarak, ve Rows
özelliklerini sırasıyla %95 ve 15 olarak ayarlayın.ID
Bu TextBox denetimi, içeriğinin Web.config
şifrelenip şifrelenmediğini hızla görmemizi sağlayan içeriğini görüntüler. Elbette, gerçek bir uygulamada içeriğini Web.config
görüntülemek istemezsiniz.
TextBox'ın altına ve DecryptConnStrings
adlı EncryptConnStrings
iki Düğme denetimi ekleyin. Metin özelliklerini Bağlantı Dizelerini Şifrele ve Bağlantı Dizelerinin Şifresini Çöz olarak ayarlayın.
Bu noktada ekranınız Şekil 2'ye benzer görünmelidir.
Şekil 2: Sayfaya TextBox ve İki Düğmeli Web Denetimleri Ekleme (Tam boyutlu resmi görüntülemek için tıklayın)
Ardından, sayfa ilk yüklendiğinde TextBox içindekileri Web.config
WebConfigContents
yükleyen ve görüntüleyen kod yazmamız gerekir. Aşağıdaki kodu sayfanın arka planda kod sınıfına ekleyin. Bu kod adlı DisplayWebConfig
bir yöntem ekler ve olduğunda Page.IsPostBack
false
bunu olay işleyicisinden Page_Load
çağırır:
protected void Page_Load(object sender, EventArgs e)
{
// On the first page visit, call DisplayWebConfig method
if (!Page.IsPostBack)
DisplayWebConfig();
}
private void DisplayWebConfig()
{
// Reads in the contents of Web.config and displays them in the TextBox
StreamReader webConfigStream =
File.OpenText(Path.Combine(Request.PhysicalApplicationPath, "Web.config"));
string configContents = webConfigStream.ReadToEnd();
webConfigStream.Close();
WebConfigContents.Text = configContents;
}
yöntemi, DisplayWebConfig
uygulama Web.config
dosyasını açmak için sınıfını, içeriğini bir dizede okumak için sınıfını ve dosyanın fiziksel yolunu oluşturmak için sınıfınıFile
Web.config
kullanırPath
.StreamReader
Bu üç sınıfın tümü ad alanında System.IO
bulunur. Sonuç olarak, arkadaki kod sınıfının en üstüne bir using
System.IO
deyimi eklemeniz veya alternatif olarak bu sınıf adlarının System.IO.
başına ile ön ek eklemeniz gerekir.
Ardından, iki Düğme denetimi Click
olayı için olay işleyicileri eklememiz ve DPAPI sağlayıcısıyla makine düzeyinde bir anahtar kullanarak bölümü şifrelemek ve şifresini çözmek <connectionStrings>
için gerekli kodu eklememiz gerekir. Tasarım Aracı, Düğmelerin her birine çift tıklayarak arka kod sınıfına bir Click
olay işleyicisi ekleyin ve aşağıdaki kodu ekleyin:
protected void EncryptConnStrings_Click(object sender, EventArgs e)
{
// Get configuration information about Web.config
Configuration config =
WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
// Let's work with the <connectionStrings> section
ConfigurationSection connectionStrings = config.GetSection("connectionStrings");
if (connectionStrings != null)
// Only encrypt the section if it is not already protected
if (!connectionStrings.SectionInformation.IsProtected)
{
// Encrypt the <connectionStrings> section using the
// DataProtectionConfigurationProvider provider
connectionStrings.SectionInformation.ProtectSection(
"DataProtectionConfigurationProvider");
config.Save();
// Refresh the Web.config display
DisplayWebConfig();
}
}
protected void DecryptConnStrings_Click(object sender, EventArgs e)
{
// Get configuration information about Web.config
Configuration config =
WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
// Let's work with the <connectionStrings> section
ConfigurationSection connectionStrings =
config.GetSection("connectionStrings");
if (connectionStrings != null)
// Only decrypt the section if it is protected
if (connectionStrings.SectionInformation.IsProtected)
{
// Decrypt the <connectionStrings> section
connectionStrings.SectionInformation.UnprotectSection();
config.Save();
// Refresh the Web.config display
DisplayWebConfig();
}
}
İki olay işleyicisinde kullanılan kod neredeyse aynıdır. Her ikisi de sınıf OpenWebConfiguration
yöntemi aracılığıyla WebConfigurationManager
geçerli uygulama Web.config
dosyası hakkında bilgi alarak başlar. Bu yöntem, belirtilen sanal yol için web yapılandırma dosyasını döndürür. Ardından, Web.config
dosya s <connectionStrings>
bölümüne bir ConfigurationSection
nesnesi döndüren sınıf sGetSection(sectionName)
yöntemi aracılığıyla Configuration
erişilir.
nesnesi, ConfigurationSection
yapılandırma bölümüyle ilgili ek bilgiler ve işlevler sağlayan bir SectionInformation
özellik içerir. Yukarıdaki kodda gösterildiği gibi, özellik s IsProtected
özelliğini denetleyerek SectionInformation
yapılandırma bölümünün şifrelenip şifrelenmediğini belirleyebiliriz. Ayrıca bölümü, özellik s ProtectSection(provider)
ve UnprotectSection
yöntemleri aracılığıyla SectionInformation
şifrelenebilir veya şifresi çözülebilir.
yöntemi, ProtectSection(provider)
şifreleme sırasında kullanılacak korumalı yapılandırma sağlayıcısının adını belirten bir dize girişi olarak kabul eder. EncryptConnString
Button s olay işleyicisinde, DPAPI sağlayıcısının ProtectSection(provider)
kullanılması için yöntemine DataProtectionConfigurationProvider geçiririz. yöntemi, UnprotectSection
yapılandırma bölümünü şifrelemek için kullanılan sağlayıcıyı belirleyebilir ve bu nedenle herhangi bir giriş parametresi gerektirmez.
veya yöntemini çağırdıktan ProtectSection(provider)
sonra, değişiklikleri kalıcı hale getirmek için nesnesinin Save
yöntemini çağırmanız Configuration
gerekir.UnprotectSection
Yapılandırma bilgileri şifrelendikten veya şifresi çözüldükten ve değişiklikler kaydedildikten sonra, güncelleştirilmiş Web.config
içeriği TextBox denetimine yüklemeye çağırırızDisplayWebConfig
.
Yukarıdaki kodu girdikten sonra, tarayıcı üzerinden sayfayı EncryptingConfigSections.aspx
ziyaret ederek test edin. Başlangıçta, düz metin olarak görüntülenen bölümün <connectionStrings>
içeriğini Web.config
listeleyen bir sayfa görmeniz gerekir (bkz. Şekil 3).
Şekil 3: Sayfaya TextBox ve İki Düğmeli Web Denetimleri Ekleme (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Şimdi Bağlantı Dizelerini Şifrele düğmesine tıklayın. İstek doğrulaması etkinleştirilirse, TextBox'tan geri gönderilen işaretleme, istemciden WebConfigContents
tehlikeli Request.Form
olabilecek bir değer algılandı iletisini görüntüleyen bir HttpRequestValidationException
oluşturur. ASP.NET 2.0'da varsayılan olarak etkinleştirilen istek doğrulama, kodlanmamış HTML içeren geri göndermeleri yasaklar ve betik ekleme saldırılarını önlemeye yardımcı olmak için tasarlanmıştır. Bu denetim sayfa veya uygulama düzeyinde devre dışı bırakılabilir. Bu sayfayı kapatmak için yönergesinde @Page
ayarını olarak false
ayarlayınValidateRequest
. yönergesi @Page
, sayfanın bildirim temelli işaretlemesinin en üstünde bulunur.
<%@ Page ValidateRequest="False" ... %>
İstek doğrulaması, amacı, sayfa ve uygulama düzeyinde devre dışı bırakma ve HTML kodlama işaretlemesi hakkında daha fazla bilgi için bkz. İstek Doğrulama - Betik Saldırılarını Önleme.
Sayfa için istek doğrulamayı devre dışı bırakdıktan sonra Bağlantı Dizelerini Şifrele düğmesine yeniden tıklamayı deneyin. Geri göndermede, yapılandırma dosyasına erişilir ve <connectionStrings>
bölümü DPAPI sağlayıcısı kullanılarak şifrelenir. TextBox daha sonra yeni Web.config
içeriği görüntüleyecek şekilde güncelleştirilir. Şekil 4'de gösterildiği gibi bilgiler <connectionStrings>
artık şifrelenir.
Şekil 4: Bağlantı Dizelerini Şifrele Düğmesine tıklanması Bölümü Şifreler <connectionString>
(Tam boyutlu görüntüyü görüntülemek için tıklayın)
Öğedeki içeriğin bir bölümü kısa süre için kaldırılmış olsa da, bilgisayarımda <CipherData>
oluşturulan şifrelenmiş <connectionStrings>
bölüm şu şekildedir:
<connectionStrings
configProtectionProvider="DataProtectionConfigurationProvider">
<EncryptedData>
<CipherData>
<CipherValue>AQAAANCMnd8BFdERjHoAwE/...zChw==</CipherValue>
</CipherData>
</EncryptedData>
</connectionStrings>
Not
öğesi, <connectionStrings>
şifrelemeyi (DataProtectionConfigurationProvider
) gerçekleştirmek için kullanılan sağlayıcıyı belirtir. Bu bilgiler, Bağlantı Dizelerinin Şifresini Çöz düğmesine tıklandığında yöntemi tarafından UnprotectSection
kullanılır.
bağlantı dizesi bilgilerine Web.config
, yazdığımız kodla, SqlDataSource denetiminden veya Typed DataSets'imizdeki TableAdapters'dan otomatik olarak oluşturulan koddan erişildiğinde, şifresi otomatik olarak çözülür. Kısacası, şifrelenmiş <connectionString>
bölümün şifresini çözmek için ek kod veya mantık eklememiz gerekmez. Bunu göstermek için, şu anda Temel Raporlama bölümündeki~/BasicReporting/SimpleDisplay.aspx
Basit Görüntü öğreticisi ( gibi) önceki öğreticilerden birini ziyaret edin. Şekil 5'te gösterildiği gibi öğretici tam olarak beklediğimiz gibi çalışır ve şifrelenmiş bağlantı dizesi bilgilerinin şifresinin ASP.NET sayfası tarafından otomatik olarak çözüldüğünü gösterir.
Şekil 5: Veri Erişim Katmanı Bağlantı Dizesi Bilgilerinin Şifresini Otomatik Olarak Çözer (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Bölümü düz metin gösterimine geri döndürmek <connectionStrings>
için Bağlantı Dizelerinin Şifresini Çöz düğmesine tıklayın. Geri göndermede, bağlantı dizelerini düz metin olarak Web.config
görmeniz gerekir. Bu noktada, ekranınız bu sayfayı ilk ziyaret ettiğinizde olduğu gibi görünmelidir (bkz. Şekil 3'te).
3. Adım: aspnet_regiis.exe Kullanarak Yapılandırma Bölümlerini Şifreleme
.NET Framework klasöründe çeşitli komut satırı araçları $WINDOWS$\Microsoft.NET\Framework\version\
bulunur. Örneğin , SQL Önbellek Bağımlılıklarını Kullanma öğreticisinde, SQL önbellek bağımlılıkları için gerekli altyapıyı eklemek için komut satırı aracını kullanmayı aspnet_regsql.exe
inceledik. Bu klasördeki bir diğer yararlı komut satırı aracı da iis kayıt aracı (aspnet_regiis.exe
) ASP.NET. Adından da anlaşılacağı gibi, ASP.NET IIS Kayıt aracı öncelikli olarak bir ASP.NET 2.0 uygulamasını Microsoft'un profesyonel düzeydeki Web sunucusu IIS'ye kaydetmek için kullanılır. IIS ile ilgili özelliklerine ek olarak, ASP.NET IIS Kayıt aracı içinde Web.config
belirtilen yapılandırma bölümlerini şifrelemek veya şifresini çözmek için de kullanılabilir.
Aşağıdaki deyim, komut satırı aracıyla bir yapılandırma bölümünü şifrelemek için kullanılan genel söz dizimini aspnet_regiis.exe
gösterir:
aspnet_regiis.exe -pef section physical_directory -prov provider
bölümü şifrelemek için yapılandırma bölümüdür (connectionStrings gibi), physical_directory web uygulamasının kök dizininin tam, fiziksel yoludur ve sağlayıcı kullanılacak korumalı yapılandırma sağlayıcısının adıdır (DataProtectionConfigurationProvider gibi). Alternatif olarak, web uygulaması IIS'de kayıtlıysa, aşağıdaki söz dizimini kullanarak fiziksel yol yerine sanal yolu girebilirsiniz:
aspnet_regiis.exe -pe section -app virtual_directory -prov provider
Aşağıdaki aspnet_regiis.exe
örnek, DPAPI sağlayıcısını <connectionStrings>
kullanarak bölümü makine düzeyinde bir anahtarla şifreler:
aspnet_regiis.exe -pef
"connectionStrings" "C:\Websites\ASPNET_Data_Tutorial_73_CS"
-prov "DataProtectionConfigurationProvider"
Benzer şekilde, aspnet_regiis.exe
komut satırı aracı yapılandırma bölümlerinin şifresini çözmek için kullanılabilir. anahtarını -pdf
kullanmak -pef
yerine kullanın (veya yerine -pe
kullanın-pd
). Ayrıca, şifresi çözülürken sağlayıcı adının gerekli olmadığını unutmayın.
aspnet_regiis.exe -pdf section physical_directory
-- or --
aspnet_regiis.exe -pd section -app virtual_directory
Not
Bilgisayara özgü anahtarları kullanan DPAPI sağlayıcısını kullandığımızdan, web sayfalarının sunulduğu makineden çalıştırmanız aspnet_regiis.exe
gerekir. Örneğin, bu komut satırı programını yerel geliştirme makinenizden çalıştırır ve ardından şifrelenmiş Web.config dosyasını üretim sunucusuna yüklerseniz, üretim sunucusu geliştirme makinenize özgü anahtarlar kullanılarak şifrelendiği için bağlantı dizesi bilgilerinin şifresini çözemez. RSA anahtarlarını başka bir makineye dışarı aktarmak mümkün olduğundan RSA sağlayıcısının bu sınırlaması yoktur.
Veritabanı Kimlik Doğrulama Seçeneklerini Anlama
Herhangi bir uygulamanın bir Microsoft SQL Server veritabanına , INSERT
, UPDATE
veya DELETE
sorguları düzenleyebilmesi SELECT
için önce veritabanının istekte bulunanı tanımlaması gerekir. Bu işlem kimlik doğrulaması olarak bilinir ve SQL Server iki kimlik doğrulama yöntemi sağlar:
- Windows Kimlik Doğrulaması - uygulamanın çalıştığı işlem veritabanıyla iletişim kurmak için kullanılır. Visual Studio 2005 s ASP.NET Development Server aracılığıyla bir ASP.NET uygulaması çalıştırırken, ASP.NET uygulama şu anda oturum açmış olan kullanıcının kimliğini varsayar. Microsoft Internet Information Server 'da (IIS) ASP.NET uygulamalar için, ASP.NET uygulamalar genellikle veya
domainName``\NETWORK SERVICE
kimliğinidomainName``\MachineName
varsayar, ancak bu özelleştirilebilir. - SQL Kimlik Doğrulaması - Kimlik doğrulaması için kimlik bilgileri olarak bir kullanıcı kimliği ve parola değerleri sağlanır. SQL kimlik doğrulaması ile kullanıcı kimliği ve parola bağlantı dizesi sağlanır.
Windows kimlik doğrulaması daha güvenli olduğundan SQL kimlik doğrulamasına göre tercih edilir. Windows kimlik doğrulaması ile bağlantı dizesi kullanıcı adı ve parola içermez ve web sunucusu ve veritabanı sunucusu iki farklı makinede bulunuyorsa, kimlik bilgileri ağ üzerinden düz metin olarak gönderilmez. Ancak SQL kimlik doğrulaması ile kimlik doğrulama kimlik bilgileri bağlantı dizesi sabit kodlanır ve web sunucusundan veritabanı sunucusuna düz metin olarak iletilir.
Bu öğreticilerde Windows kimlik doğrulaması kullanılmıştır. bağlantı dizesi inceleyerek hangi kimlik doğrulama modunun kullanıldığını anlayabilirsiniz. Öğreticilerimizin bağlantı dizesiWeb.config
:
Data Source=.\SQLEXPRESS; AttachDbFilename=|DataDirectory|\NORTHWND.MDF; Integrated Security=True; User Instance=True
Integrated Security=True ve kullanıcı adı ve parola eksikliği, Windows kimlik doğrulamasının kullanıldığını gösterir. Bazı bağlantı dizelerinde Tümleşik Güvenlik=True yerine Güvenilen Bağlantı=Evet veya Tümleşik Güvenlik=SSPI terimi kullanılır, ancak üçü de Windows kimlik doğrulamasının kullanıldığını gösterir.
Aşağıdaki örnekte SQL kimlik doğrulaması kullanan bir bağlantı dizesi gösterilmektedir. $CREDENTIAL_PLACEHOLDER$
, parola anahtar-değer çifti için yer tutucudur. Kimlik bilgilerinin bağlantı dizesi ekli olduğunu unutmayın:
Server=serverName; Database=Northwind; uid=userID; $CREDENTIAL_PLACEHOLDER$
Bir saldırganın uygulamanızın dosyasını görüntüleyebildiğini Web.config
düşünün. İnternet üzerinden erişilebilen bir veritabanına bağlanmak için SQL kimlik doğrulaması kullanırsanız, saldırgan bu bağlantı dizesi SQL Management Studio aracılığıyla veya kendi web sitesindeki ASP.NET sayfalardan veritabanınıza bağlanmak için kullanabilir. Bu tehdidin azaltılmasına yardımcı olmak için korumalı yapılandırma sistemini kullanarak içindeki Web.config
bağlantı dizesi bilgilerini şifreleyin.
Not
SQL Server'da kullanılabilen farklı kimlik doğrulaması türleri hakkında daha fazla bilgi için bkz. Güvenli ASP.NET Uygulamaları Oluşturma: Kimlik Doğrulaması, Yetkilendirme ve Güvenli İletişim. Windows ve SQL kimlik doğrulaması söz dizimi arasındaki farkları gösteren diğer bağlantı dizesi örnekler için ConnectionStrings.com bakın.
Özet
Varsayılan olarak, bir ASP.NET uygulamasında uzantılı .config
dosyalara tarayıcı üzerinden erişilemez. Bu tür dosyalar veritabanı bağlantı dizeleri, kullanıcı adları ve parolalar gibi hassas bilgiler içerebileceğinden döndürülmez. .NET 2.0'daki korumalı yapılandırma sistemi, belirtilen yapılandırma bölümlerinin şifrelenmesine izin vererek hassas bilgilerin daha fazla korunmasına yardımcı olur. biri RSA algoritmasını, diğeri de Windows Veri Koruma API'sini (DPAPI) kullanan iki yerleşik korumalı yapılandırma sağlayıcısı vardır.
Bu öğreticide, DPAPI sağlayıcısını kullanarak yapılandırma ayarlarını şifrelemeyi ve şifresini çözmeyi inceledik. Bu, 2. Adımda gördüğümüz gibi hem program aracılığıyla hem de 3. Adımda ele alınan komut satırı aracı aracılığıyla aspnet_regiis.exe
gerçekleştirilebilir. Kullanıcı düzeyi anahtarları kullanma veya bunun yerine RSA sağlayıcısını kullanma hakkında daha fazla bilgi için, Daha Fazla Okuma bölümündeki kaynaklara bakın.
Mutlu Programlama!
Daha Fazla Bilgi
Bu öğreticide ele alınan konular hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın:
- Güvenli ASP.NET Uygulaması Oluşturma: Kimlik Doğrulaması, Yetkilendirme ve Güvenli İletişim
- ASP.NET 2.0 Uygulamalarında Yapılandırma Bilgilerini Şifreleme
Web.config
ASP.NET 2.0'da Değerleri Şifreleme- Nasıl yapılır: ASP.NET 2.0'da DPAPI Kullanarak Yapılandırma Bölümlerini Şifreleme
- Nasıl Yapılır: RSA Kullanarak ASP.NET 2.0'da Yapılandırma Bölümlerini Şifreleme
- .NET 2.0'da Yapılandırma API'si
- Windows Veri Koruması
Yazar hakkında
Yedi ASP/ASP.NET kitabının yazarı ve 4GuysFromRolla.com kurucusu Scott Mitchell, 1998'den beri Microsoft Web teknolojileriyle çalışmaktadır. Scott bağımsız bir danışman, eğitmen ve yazar olarak çalışmaktadır. Son kitabı Sams Teach Yourself ASP.NET 24 Saat içinde 2.0. Adresine adresinden veya adresinden ulaşabileceğiniz http://ScottOnWriting.NETblogu aracılığıyla ulaşabilirsinizmitchell@4GuysFromRolla.com.
Özel Teşekkürler
Bu öğretici serisi birçok yararlı gözden geçiren tarafından gözden geçirildi. Bu öğreticinin baş gözden geçirenleri Teresa Murphy ve Randy Schmidt'tir. Yaklaşan MSDN makalelerimi gözden geçirmek istiyor musunuz? Öyleyse, bana bir satır mitchell@4GuysFromRolla.combırakın.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin