فروش ویژه : ثبت دامنه آی آر IR فقط 99 هزار تومان سفارش آنلاین/ تحویل آنی
فروش ویژه : ثبت دامنه دات کام COM فقط 899 هزار تومان سفارش آنلاین/ تحویل آنی (بهترین پیشنهاد)
فروش ویژه : 1500 مگابایت هاست ابری به همراه SSL رایگان ماهیانه فقط 69 هزار تومان مشاهده مشخصات و پلن ها

ساختار فایل Web.Config در ASP.NET

از ابتدای زمانی که شروع به طراحی و توسعه وب سایت می نماییم تا انتهای برنامه و application های مربوطه، مرتبا نیاز به اعمال تغییرات در فایل Web.config می باشد. این تغییرات نه تنها تغییرات امنیتی برنامه های کاربردی هستند، بلکه طیف گسترده ای از اهداف مختلف را می توان در فایل Web.config مدیریت نمود.
در زبان برنامه نویسی ASP.NET ، فایل Web.config، انعطاف پذیری بسیار خوبی جهت مدیریت تمام نیازها در سطح برنامه کاربردی (application level) را فراهم می نماید.
لذا با توجه به اهمیت پیکربندی و استفاده از فایل Web.config ، در این مقاله برآن شدیم که درک ساده ای از ابزار های مورد استفاده در فایل های پیکربندی را ارائه نماییم.
در این مقاله توضیحات کامل و جامعی در رابطه با بخش ها و تنظیمات موجود در فایل Web.config و نحوه تنظیمات و پیکر بندی آن ها را ارائه خواهیم داد.

 

به خاطر داشته باشید که فایل Web.config را در زبان ASP.NET، می توان هنگام ایجاد برنامه و یا هنگام گسترش و یا بعد از گسترش و توسعه برنامه ایجاد و بازنگری نمود.

قبل از هر اقدامی، در رابطه با فایل Web.config، به موارد زیر توجه نمایید:

  • فایل config، به فرمت XML ذخیره می شود که باعث راحتی و سادگی آن می شود.
  • جهت یک Application خاص، شما می توانید یک یا چند فایل config داشته باشید.
  • تنظیمات هر فایل config تنها روی پوشه (Directory) مربوطه و محتویات درون همان پوشه اعمال خواهد شد.
  • تمامی فایل های config، از فایل اصلی Web.config که در مسیر systemroot\Microsoft.NET\Framework\versionNumber\CONFIG\Web.config قرار دارد، به ارث برده می شوند.
  • تنظیمات IIS به گونه ای است که اجازه دسترسی به فایل config، را توسط مرورگر (Browser) نمی دهد.
  • اعمال تغییرات در فایل config نیازی به Reboot وب سرور نخواهد داشت.

 

تنظیمات Web.config :

قبل از شروع تنظیمات پیکربندی در ASP.NET، اجازه دهید نگاهی به سلسله مراتب فایل Web.config داشته باشیم.

[xml]
<configuration>

        <configSections>
            <sectionGroup>
            </sectionGroup>
        </configSections>

        <system.web>
        </system.web>

        <connectionStrings>
        </connectionStrings>

        <appSettings>
        </appSettings>
        …………………………………………………………………………………………………………
        …………………………………………………………………………………………………………
        …………………………………………………………………………………………………………
        …………………………………………………………………………………………………………
        …………………………………………………………………………………………………………

</configuration>
[/xml]

 

همانطور که در ساختار درختی بالا مشاهده می کنید، تگ (tag) های configuration ، عناصر اصلی فایل Web.config می باشند که شامل تمامی عناصر زیربط (sub elements) می باشد.

اصلی ترین بخش های فایل Web.config به شرح زیر می باشند:

  • بخش web
  • بخش AppSettings
  • بخش connectionStrings
  • بخش ConfigSections

هر عنصر می تواند شامل تعدادی صفت ها (attributes) و زیر شاخه ها (child elements) شوند که مقادیر و یا تنظیمات بخش مربوطه را مشخص می نماید.

 

بخش system.web :

در تنظیمات پیکربندی، مهمترین بخش، system.web می باشد که در ادامه به معرفی زیر بخش های مربوط به آن می پردازیم.

 

  • تنظیمات Compilation :

در Visual Studio 2010، می توان گفت تنها بخش موجود در فایل Web.config، بخش Compilation می باشد. در صورتی که نیاز به مشخص نمودن target framework دارید و یا می خواهید assembly را از Global Assembly Cache (GAC) اضافه نمایید، ویا برای فعال کردن مد debugging mode برنامه های کاربردی، می بایست از تنظیمات Compilation استفاده نمایید.

کد زیر نمونه ای از کاربرد های فوق می باشد:

[xml]
<system.web
	<compilation
                 debug="true" strict="true" explicit="true" batch="true"
                 optimizeCompilations="true" batchTimeout="900"
                 maxBatchSize="1000" maxBatchGeneratedFileSize="1000"
                 numRecompilesBeforeAppRestart="15" defaultLanguage="c#"
                 targetFramework="4.0" assemblyPostProcessorType="">
	<assemblies>
		<add assembly="System, Version=1.0.5000.0, Culture=neutral,
                  PublicKeyToken=b77a5c561934e089"/>
	</assemblies>

</compilation>
</system.web>
[/xml]

در بخش assemblies، می توانید نوع، ورژن، culture و public key مربوط به assembly را وارد نمایید.

 

  • تنظیمات صفحه :

با توجه به این که نرم افزار ASP.NET شامل صفحات متعددی می باشد، امکان اعمال تنظیمات کلی روی صفحات نظیر sessionstate، viewstate، bufferو... در فایل Web.config فراهم می شود.

بطور نمونه به کد زیر توجه نمایید:

[xml]
<pages buffer ="true" styleSheetTheme="" theme ="Acqua"
 masterPageFile ="MasterPage.master"
 enableEventValidation="true">
[/xml]

همانطور که می بینید در این مثال با استفاده از MasterPageFile و صفت theme ، امکان تعریف قالب کلی و صفحه اصلی (master page)، برای تمام صفحات وب فراهم می شود.

 

  • تنظیم خطاهای سفارشی

بخش بعدی فایل Web.config، ایجاد صفحات خطای سفارشی می باشد که امکان ایجاد و تنظیم صفحات خطای دلخواه را در سطح خطاهای کاربردی (application level errors) فراهم می کند.

در این راستا به کدهای زیر توجه نمایید:

[xml] 
<customErrors defaultRedirect ="Error.aspx" mode ="Off">
   <error statusCode ="401" redirect ="Unauthorized.aspx"/>
</customErrors>
[/xml]

در این کد نحوه شناسایی صفحات سفارشی به برنامه آورده شده است. صفت های defaultRedirect و mode، صفحه خطای سفارشی پیش فرض و فعال / غیر فعال بودن آن را بیان می کنند.

بخش customErrors امکان ریدایرکت کردن به صفحه طراحی شده خاصی را با توجه به نوع کد خطا فراهم می کند.

مهمترین این خطا ها به شرح زیر هستند:

400: Bad Request ، 401: Unauthorized ، 404: Not Found ، 408: Request Timeout

جهت مشاهده جزئیات بیشتر در مورد کد خطاها، مینوانید به کدهای وضعیت رایج HTTP و تشریح کدهای وضعیت HTTP مراجعه نمایید.

 

  • تنظیمات تگ Location

در صورتی که روی پروژه اصلی کار می کنید، ممکن است نیاز به تعدادی فولدر ها و زیر فولدر ها داشته باشید، جهت مدیریت آنها دو کار می توان انجام داد؛ راه اول این است که برای هر کدام از فولدرها و زیر شاخه های آن، یک فایل Web.config مجزا قرار دهید و راه دوم استفاده از یک فایل Web.config برای کل پروژه می باشد.

در صورت انتخاب راه دوم و ایجاد تنها یک فایل Web.config برای کل پروژه، جهت تنظیمات فولدر های برنامه میبایست از تگ Location در بخش system.web استفاده نمایید.

به کدهای زیر در این زمینه توجه نمایید:

[xml]
<location path="Login.aspx">
	<system.web>
		<authorization>
	         <allow users="*"/>
		</authorization>
	</system.web>
</location>
[/xml]
[xml]
<location path ="Uploads">
    <system.web>
	<compilation debug = "false">
    </system.web>
</location>
[/xml]

بطور خلاصه می توان گفت امکان اعمال هرگونه تنظیمی روی فایلها و فولدر توسط تگ Location امکان پذیر است.

 

  • تنظیم وضعیت های Session و View

با توجه به اینکه در ASP.NET می بایست جهت مدیریت وضعیت ها از (state management techniques) تکنیک های مدیریت state استفاده شود، وضعیت های Session و View، از طریق فایل Web.config قابل دسترسی هستند.

وضعیت View مطابق زیر می تواند فعال و یا غیر فعال شود. همچنین کد مربوط به وضعیت Session برای مدهای مختلف به شرح زیر می باشد:

[xml]
<Pages EnableViewState="false" />
[/xml]

و

[xml]
<sessionState mode="InProc" />
[/xml]

و

[xml]
<sessionState mode="StateServer" stateConnectionString= "tcpip=Yourservername:42424" />
[/xml]

و

[xml]
<sessionState mode="SQLServer" sqlConnectionString="cnn" />
[/xml]

 

تنظیمات HttpHandler

در واقع کد HttpHandler، کدی است که هنگامی که درخواست http برای منبع خاصی، به سرور ارسال می شود، اجرا می شود. بطور مثال، هنگامی که درخواست صفحه .aspx ارسال می شود، هندلر صفحات ASP.NET یا (ASP.NET page handler) اجرا می شود.

امکان ایجاد httphandler دلخواه روی IIS و نیز دریافت نتیجه وضعیت پس از انجام درخواست می باشد.

جهت این کار می بایست کلاس مرتبط با ابزار IHttpHanlder را ایجاد نموده و سپس مشابه کد زیر را در فایل Web.config، قرار دهید.

[xml]
<httpHandlers>
    <add verb="*" path="*.jpg" type="ImageHandler"/>
    <add verb="*" path="*.gif" type="ImageHandler"/>
</httpHandlers/>
[/xml]
  • تنظیمات HttpModule :

کلاس HttpModule ، برای اجرای اینترفیس IHttpModule بکار می رود و جهت مدیریت event های سطح کاربر (user events) و برنامه کاربردی (application events) به کار می رود.

[xml]
<httpModules>
      <add type ="TwCustomHandler.ImageHandler" name ="TwCustomHandler"/>
      <remove name ="TwCustomHandler"/>
      <clear />
</httpModules>
[/xml]

همانطور که در کد زیر مشاهده می کنید، امکان ایجاد HttpModule دلخواه در IIS توسط فایل Web.config می باشد.

  • تنظیمات مجوز های دسترسی، نقش ها و مالکیت :

همانطور که می دانید از بخش های اصلی ASP.NET، احراز هویت (Authentication)، دادن مجوز های دسترسی خاص (Authorization)، عضویت (Membership Provider)، نقش ها (Role Provider) و Profile Provider می باشد که امکان مدیریت آن ها در فایل Web.config فراهم می شود.

بطور مثال به نمونه کدهای زیر توجه نمایید.

[xml]
<authentication mode="Forms">
     <forms cookieless="UseCookies" defaultUrl="HomePage.aspx"
 loginUrl="UnAuthorized.aspx" protection="All" timeout="30">
      </forms>
</authentication> 
[/xml]
[xml]
<authorization
        <allow roles ="Admin"/>
        <deny users ="*"/>
</authorization> 
[/xml]

و

[xml]
<membership defaultProvider="Demo_MemberShipProvider">
	<providers>
	   <add name="Demo_MemberShipProvider"
	        type="System.Web.Security.SqlMembershipProvider"
	        connectionStringName="cnn"
	        enablePasswordRetrieval="false"
	        enablePasswordReset="true"
	        requiresQuestionAndAnswer="true"
	        applicationName="/"
	        requiresUniqueEmail="false"
	        passwordFormat="Hashed"
	        maxInvalidPasswordAttempts="5"
	        minRequiredPasswordLength="5"
	        minRequiredNonalphanumericCharacters="0"
	       passwordAttemptWindow="10" passwordStrengthRegularExpression="">
	</providers>
</membership>
[/xml]

و

[xml]
<roleManager enabled="true" cacheRolesInCookie="true"
cookieName="TBHROLES" defaultProvider="Demo_RoleProvider">
              <providers>
                  <add connectionStringName="dld_connectionstring"
                  applicationName="/" name="Demo_RoleProvider"
                  type="System.Web.Security.SqlRoleProvider, System.Web,
                  Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
             </providers>
</roleManager>
[/xml]

و

[xml]
<profile defaultProvider="Demo_ProfileProvider">
    <providers>
	<add name="Demo_ProfileProvider" connectionStringName="cnn"
	applicationName="/" type="System.Web.Profile.SqlProfileProvider,
	System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
    </providers>
    <properties>
	<add name="Name" type="String"/>
	<add name="DateofBirth" type="DateTime"/>
	<add name="Place" type="string"/>
    </properties>
</profile>
[/xml]

بخش AppSettings :

در این بخش، تنظیمات مربوط به بخش appSettings آورده شده است. عنصر appSettings، امکان ذحیره سازی اطلاعات مربوط به تنظیمات اپلیکشن ها نظیر مسیر فایل ها، URLها، پورت ها، connection strings و ... را فراهم می کند.

[xml]
<appSettings>
	<add key="AppKey" value="APLJI12345AFAFAF89999BDFG"/>
</appSettings>
[/xml]

بخش connectionStrings :

مهمترین بخش فایل Web.config، بخش تنظیمات دسترسی به دیتابیس می باشد که از طریق connectionStrings مشخص می شود. تگ connectionStrings، شامل عناصری و صفاتی است که ارتباط با دیتابیس را فراهم می کند.

بطور مثال در کدهای زیر تنظیمات اتصال به دیتابیس آورده شده است:

[xml]
<connectionStrings>
    <add name ="cnn" connectionString ="Initial Catalog = master;
 Data Source =localhost; Integrated Security = true"/>
</connectionStrings>
[/xml]
[xml]
<connectionStrings>

         <add name="db" connectionString="Provider=SQLOLEDB.1;Password=123456;
Persist Security Info=True; User ID=663_com;Initial Catalog=663_com;
Data Source=sql2008,1438\sql2008" providerName="System.Data.SqlClient" />

</connectionStrings>
[/xml]

 

 

بخش ConfigSections :

بخش ConfigSections، امکان ایجاد بخش تنظیمات دلخواه را فراهم می آورد. بخش ConfigSections می بایست بلافاصله زیر عنصر اصلی configuration آورده شود. در غیر اینصورت باعث بروز خطا می شود.

[xml]
<configSections>
    <sectionGroup name="pageAppearanceGroup">
      <section
        name="pageAppearance"
        type="PageAppearanceSection"
        allowLocation="true"
        allowDefinition="Everywhere"
      />
 </sectionGroup>
 </configSections>
[/xml]

 

 

 

نحوه دسترسی برنامه به فایل Web.config :

با استفاده از زبان برنامه نویسی C#، امکان فراخوانی و یا تغییر مقادیر فایل Web.config می باشد.

 

با بکاربردن یکی از روش های زیر امکان فراخوانی بخش appSettings می باشد:

[csharp]
//Method 1:
        string key = ConfigurationManager.AppSettings["AppKey"];
        Response.Write(key);

//Method 2:
        Configuration config = WebConfigurationManager.OpenWebConfiguration("~/");
        KeyValueConfigurationElement Appsetting = config.AppSettings.Settings["AppKey"];
        Response.Write(Appsetting.Key + " 
" + "Value:" + Appsetting.Value);
[/csharp]

 

با بکاربردن یکی از روش های زیر امکان فراخوانی مقادیر بخش connectionstring می باشد:

[csharp]
//Method 1:
        string cnn = ConfigurationManager.ConnectionStrings["conn"].ConnectionString;

//Methods 2:
        Configuration config = WebConfigurationManager.OpenWebConfiguration("~/");
        ConnectionStringSettings cnnstring;

        if (config.ConnectionStrings.ConnectionStrings.Count > 0)
        {
            cnnstring = config.ConnectionStrings.ConnectionStrings["conn"];
            if (cnnstring != null)
                Response.Write("ConnectionString:" + cnnstring.ConnectionString);
            else
                Response.Write(" No connection string");
        }
[/csharp]

 

با بکاربردن دستورات زیر امکان فراخوانی مقادیر بخش configuration می باشد:

[csharp]
// Intialize System.Configuration object.
Configuration config = WebConfigurationManager.OpenWebConfiguration("~/");
//Get the required section of the web.config file by using configuration object.
CompilationSection compilation = 
	(CompilationSection)config.GetSection("system.web/compilation");
//Access the properties of the web.config
Response.Write("Debug:"+compilation.Debug+"
""+
		"Language:"+compilation.DefaultLanguage);
[/csharp]

 

رمز نگاری کردن (Encrypt) بخش های مختلف در فایل Web.config :

با توجه به این که فایل Web.config همواره مورد توجه هکر ها می باشد، لذا جهت داشتن امنیت بیشتر آن، امکان رمزنگاری بخش های مختلف آن می باشد.

بطور مثال در کد زیر نحوه encrypt نمودن بخش های فایل Web.config آورده شده است:

[csharp]
Configuration config = WebConfigurationManager.OpenWebConfiguration
			(Request.ApplicationPath);
ConfigurationSection appSettings = config.GetSection("appSettings");
if (appSettings.SectionInformation.IsProtected)
{
    appSettings.SectionInformation.UnprotectSection();
}
else
{
    appSettings.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
}
config.Save();
[/csharp]

 

نتیجه گیری :

در این مقاله نحوه تنظیمات بخش های مختلف فایل web.config با ارائه مثال های کاربردی آورده شده است. همچنین در مقاله های زیر نکات پیشگیری و اقدامات امنیتی لازم روی فایل web.config آورده شده است:

بررسی نقاط آسیب پذیری و ضعف های امنیتی در فایل Web.config (قسمت اول)

بررسی نقاط آسیب پذیری و ضعف های امنیتی در فایل Web.config (قسمت دوم)

 

آیا این پاسخ مفید بود؟

خوانده شده

کلاهبرداری های اینترنتی و اسپم

در جامعه اینترنتی ایمیل‌های (بعضاً تجاری) ناخواسته، "اسپم" نامیده می‌شوند. اسپم اثری بیش از...

مرجع کامل دستورات لینوکس – فارسی

در این پست شما را با دستورات کامل لینوکس Centos آشنا خواهیم نمود، این مرجع یکی از کاملترین مراجع...

حفره های امنیتی و آسیب پذیری های جانبی

در مقاله ویروسی شدن وب سایت در رابطه با مفهوم ویروسی شدن سایت توضیحات کاملی ارائه شده است. اما می...

چگونه به قسمت مدیریت سایت وردپرس وارد شویم

در وردپرس امکان مدیریت بخش های مختلف بسیار ساده بوده و به راحتی از طریق پنل مدیریت سایت وردپرس،...

سئو (SEO) چیست؟

شاید در نگاه اول کلمه ی سئو و عمل به مفهوم آن بسیار مبهم و دشوار به نظر آید اما در واقع ساده تر...