این نوشته چگونگی ذخیره رشته های اتصال در بخش پیکربندی Connection string در فایل Web.config و چگونگی استفاده از ابزار .NET Framework tool را به منظور پنهان کردن آنها، جهت امنیت بیشتر را شرح می دهد.
در مورد کانکشن استرینگ قبلا در مقاله ای به همین نام گفته ایم.
چگونه امنیت Connection String را در هنگام استفاده از کنترل های Data Source برقرار کنیم؟
در هنگام استفاده از کنترل های Data Source، متمرکز کردن مکان ذخیره connection string در فایل Web.config برنامه توصیه می شود. این روش مدیریت ، رشته های اتصال را با در دسترس قرار دادن آنها برای تمامی صفحات ASP.NET در یک برنامه وب، تسهیل می کند. بعلاوه دیگر احتیاجی به تغییر اطلاعات رشته های اتصال در صفحات متعدد برنامه وجود ندارد. در نهایت با این روش سطح امنیت اطلاعات حساس ذخیره شده در رشته اتصال، همچون نام پایگاه داده، نام کاربری، کلمه عبور و… را با پنهان کردن بخش connectionStrings۱ فایل Web.config با استفاده از پیکربندی حفاظت شده بالا خواهید برد.
ذخیره سازی یک رشته اتصال در فایل Web.config
۱- فایل Web.config مربوطه به برنامه خود را باز نمایید. اگر فایل Web.config از قبل موجود نیست، یک فایل متنی با نام Web.config ایجاد کرده و محتوای زیر را در آن اضافه نمایید: متن مراحل ۲ تا ۸ را در اینجا ببنید.
۹- در عنصر configuration، عنصر جدیدی با نام connectionStrings ایجاد نمایید، طبق مثال زیر: متن مراحل ۱۰ تا ۱۸ را در اینجا ببنید.
۱۹- در عنصر connectionStrings، یک عنصر add برای هر یک از رشته های اتصال که در برنامه وبتان استفاده خواهید کرد، ایجاد کنید. این عنصر شامل سه خاصیت نمایش داده شده در جدول زیر است.
[irp posts=”۱۰۰۵۷″ name=”چگونگی ارتباط با دیتابیس و نحوه نوشتن connection string در ASP.Net”]
خاصیت | شرح | |
۱ | name | یک نام برای این شئ. این نام بعدا توسط کنترل های data source و دیگر featureهایی که به اطلاعات رشته اتصال رجوع می کنند، استفاده خواهند شد. |
۲ | ConnectionString | رشته اتصال به data source. |
۳ | providerName | namespace مربوطه به NET Framework data provider جهت استفاده برای این اتصال، همچون System.Data.SqlClient، System.Data.OleDb، System.Data.Odbc. |
۲۰- یک عنصر connectionStrings کامل چیزی شبیه مثال زیر است: متن مراحل ۲۱ تا ۲۵ را در اینجا ببنید.
۲۶- فایل Web.config را ذخیره نموده و ببندید.
شما با استفاده از نام تعیین شده در خاصیت name می توانید رشته اتصال را به کنترل data source ارجاع دهید.
۲۷- در خاصیت ConnectionString برای کنترل data source خود، از expression syntax رشته اتصال جهت ارجاع به اطلاعات اتصالی در فایل Web.config استفاده نمایید.
مثال زیر یک کنترل SqlDataSource۵ را نشان می دهد که در آن رشته اتصال از فایل Web.config خوانده شده است: متن برنامه را در اینجا ببنید.
چگونه اطلاعات رشته اتصال ذخیره شده در فایل Web.config را پنهان کنیم:
۱- در یک command line ویندوز، ابزار ثبت ASP.NET IIS(aspnet_regiis.exe) را با سوئیچ های زیر اجرا کنید:
- سوئیچ –pe رشته “connectionStrings” را به آن بدهید تا عنصر connectionStrings را پنهان کند.
- سوئیچ –app نام برنامه را به آن بدهید.
ابزار aspnet_regiis.exe در مسیر زیر واقع شده است:
%systemroot%Microsoft.NETFrameworkversionNumber folder.
مثال زیر چگونگی پنهانسازی بخش connectionStrings را در فایل Web.config برای برنامه ای با نام SampleApplication نشان می دهد:
aspnet_regiis -pe “connectionStrings” -app “/SampleApplication”
وقتی که اجرای فرمان به پایان رسید، می توانید محتوای فایل Web.config را مشاهده کنید. همینطور که در مثال زیر مشاهده می کنید بخش مربوط به پیکربندی connectionStrings شامل اطلاعات پنهان شده به جای رشته اتصال clear-text است: متن برنامه را در اینجا ببنید.
Command Prompt را جهت مرحله بعد نبندید.
۲- حساب کاربری یا identity که ASP.NET با بازیابی نام جاری WindowsIdentity۶ اجرا می کند را مشخص نمایید.
مثال زیر روشی را جهت مشخص نمودن WindowsIdentity نشان می دهد:
متن برنامه به زبان VB را در اینجا ببینید.
متن برنامه به زبان #C را در اینجا ببینید.
نکته: در حالت پیش فرض در Windows Server2003 قابلیت impersonation در خصوص برنامه های ASP.NET در فایل Web.config غیرفعال شده است. برنامه ها تحت identity حساب NETWORK SERVICE اجرا می شوند. در دیگر نسخه های ویندوز، ASP.NET تحت حساب محلی ASPNET اجرا می شود.
پیشنهاد میکنیم مقاله VB.net چیست را مطالعه بفرمایید.
حساب کاربری یا identity که تحت آن ASP.NET اجرا می شود می بایست دسترسی read به encryption key داشته باشد تا بتواند بخش های فایل Web.config را پنهانسازی یا آشکارسازی نماید. این پروسه فرض را بر این می گیرد که وبسایت شما با RsaProtectedConfigurationProvider۷ پیش فرض که در فایل Machine.config با نام “RsaProtectedConfigurationProvider” تعیین شده، پیکربندی شده است. RSA key container به صورت پیش فرض با RsaProtectedConfigurationProvider به نام “NetFrameworkConfigurationKey” مورد استفاده قرار می گیرد.
۳- در Command Promp، ابزار aspnet_regiis.exe را با سوئیچ های زیر اجرا نمایید:
- سوئیچ –pa را جهت تعیین نام کلید RSA key container به کار ببرید. به صورت پیش فرض: RsaProtectedConfigurationProvider
- Identity برنامه ASP.NET را همانطور که در مرحله قبل مشخص شد ، تعیین کنید.
مثال زیر چگونگی اعطای دسترسی حساب NETWORK SERVICE به machine-level “NetFrameworkConfigurationKey” RSA key container را نشان می دهد:
aspnet_regiis -pa “NetFrameworkConfigurationKey” “NT AUTHORITYNETWORK SERVICE”
۴- جهت آشکارسازی محتوای فایل Web.config، ابزار aspnet_regiis.exe رابا سوئیچ –pd اجرا نمایید. خط دستور برنامه همانند پنهانسازی محتوای فایل Web.config با استفاده از سوئیچ –pe می باشد. به جز اینکه شما protected configuration provider را تعیین نمی کنید. Provider مناسب در خاصیت configProtectionProvider جهت بخش حفاظت شده تعیین شده است.
مثال زیر چگونگی آشکارسازی عنصر connectionString در برنامه ASP.NET نمونه SampleApplication نشان داده شده است.
aspnet_regiis -pd “connectionStrings” -app “/SampleApplication”
:منبع
Encrypting Configuration Information Using Protected Configuration۸
How to: Secure Connection Strings When Using Data Source Controls
http://msdn.microsoft.com