• توجه: در صورتی که از کاربران قدیمی ایران انجمن هستید و امکان ورود به سایت را ندارید، میتوانید با آیدی altin_admin@ در تلگرام تماس حاصل نمایید.

معرفی فایل web.config

Cube

متخصص بخش هاستینگ و دامین

فایل web.config چیست؟

فایل web.config همانطور که از اسم آن پیداست یک فایل پیکربندی برای یک پروژه ASP.net میباشد .در هر پروژه ASP.net یک فایل web.config وجود دارد که امکان پیکربندی پروژه را فراهم میسازد . البته امکان اینکه چند فایل web.config در یک پروژه وجود داشته باشد نیست . در انتهای این مقاله بعد از معرفی کلی این فایل به طرز استفاده از چند فایل در یک پروژه ASP.net میپردازیم.فایل web.config یک فایل از نوع xml بوده و تمامی تگ های داخل این فایل دارای معنی بوده لازم به ذکر است که این فایل نسبت به کوچک و بزرگ بودن حروف حساس است .


فایل machine.config چیست؟

همانطور که از یک فایل web.config برای پیکربندی یک پروژه ASP.net استفاده میشود از فایل machine.config برای پیکربندی پروژه های ASP.net که در یک کامپیوتر خاص اجرا میشوند استفاده میشود.بدین معنی که پیکربندی های که در یک فایل machine.config قرار دارد تمام پروژه های ASP.net که در آن کامپیوتر قرار دارند را تحت تاثیر قرار میدهد . معمولا فایل machine.config را تغییر نمیدهند و برای هر پروژه جداگانه و با استفاده از فایل های web.config پیکربندی را بطور جداگانه انجام میدهند.


چه چیزی در فایل web.config قرار میگیرد؟

تعداد زیادی تنطیمات مهم هستند که در یک فایل web.config قرار میگیرند . در زیر به ذکر چهار مورد از مهمترین تنظیماتی که میتواند در یک فایل web.config میواند قرار بگیرد اکتفا میکنیم:


1-Database Connections

2-Session States

3-Error Handling

4-Security
 

Cube

متخصص بخش هاستینگ و دامین
1-Database Connections
یکی از مهمترین چیزهائی که در یک فایل web.config قرار میگیرد اطلاعات مربوط به connection string میباشد. دلیل قرار دادن یک connection string در یک فایل web.config زمانی مشخص میشود که قرار باشد که جای database خود را تغییر دهیم . در این حالت فقط کافی است که اطلاعات مربوط به connection string را در فایل web.config تغییر دهیم در صورتیکه اگر اطلاعات مربوط به connection string را در خود application قرار دهیم برای تغییر database باید تعداد زیادی از فایل های موجود در پروژه را تغییر دهیم و این کار زمانگیری است و بعلاوه ویژگی قابل حمل بودن یک برنامه را فوق العاده پائین می آورد . البته من زیاد با قرار دادن اطلاعات مهمی چون connectionstring به صورت خام زیاد موافق نیستم . اگر از این روش استفاده میکنید من توصیه میکنم که اطلاعات مربوط به connection string را رمز کرده و مقدار رمز شده را در فایل web.config قرار دهید . البته لازم به ذکر است که در رمز کردن از Hashing استفاده نکنید دلیلش رو اگه نمیدونید برید و مقاله قبلی که در مورد hashing هست رو یه مطالعه ای بکنید.در مثال زیر نحوه قرار دادن اطلاعات مربوط به یک Connection string را میبینیم:


<configuration>

<appSettings>

<add key=”ConnectionString” Value=”server=home;uid=sa;password=;” />

</appSettings>

</configuratrion>

همانطور که دیدید قراردادن اطلاعات مربوط به connection string در یک فایل web.config بسیار آسان است connection string با استفاده از key که در اینجا ConnectionString میباشد مورد ارجاء قرار میگیرد و value مشخص کننده مقدار این key میباشد.در حاشیه این قسمت بد نیست اگه یه سری به سایت www.connectionstring.com بزنید و در آنجا از وجود مجموعه زیادی از connection string های مختلف مربوط به DBMS های مختلف لذت ببرید. دستیابی به این key ها در یک Application بسیار آسان است .

برای دستیابی به key در یک application به شکل زیر عمل میکنیم:


Using System.Configuration;

String connection_string = ( string ) ConfigurationSettings.Appsettings[“ConnectionString”];


همانطور که گفتم گرفتن اطلاعات مربوط به یک connection string و استفاده از آن در یک Application بسیار آسان است .
 

Cube

متخصص بخش هاستینگ و دامین
2-Session States


Session در یک پروژه ASP.net بسیار مهم است . همانطور که میدانید پروتکل HTTP یک پروتکل StateLess میباشد به این معنی که بصورت اتوماتیک امکان تشخیص اینکه رشته ای از تقاضاها به سمت یک سایت همگی از سوی یک کامپیوتر صورت میگیرد یا اینکه یک مرورگر در حال مشاهده یک سایت هست یا نه وجود ندارد . برای رفع این دو مشکل فوق و در اصطلاح برای State نگه داشتن یک سایت از Session States استفاده میشود .ASP.net برای ذخیره کردن Session از روش های مختلفی استفاده میکند . به طور پیش فرض ASP.net ، session ها را در همان پردازش مربوط به سایت ذخیره سازی میکند .همچنین شما برای ذخیره سازی session ها علاوه بر روش پیش فرض میتوانید از دو روش زیر استفاده کنید . ناگفته نماند که مشخص کردن نحوه ذخیره سازی یک Session در فایل Web.config مشخص میشود.روش های ذخیره سازی را در زیر می بینید:



1-Session State Server


استفاده از این روش برای ذخیره سازی Session ها دارای دو سود مناسب است . اول اینکه به این دلیل که پروسس های مربوط به Session و Application یکی نیستند چنانچه Application به قول معروف Crash کند هیچ آسیبی متوجه Session ها نخواهد بود چون دو پردازش مجزا هستند . دومین سود این است که امکان اشتراک در میان یک کامپیوتر چند پردازنده میسر میباشد. برای مشخص کردن اینکه نحوه ذخیره سازی Session به صورت State Server باشد لازم است در فایل web.config تغییرات زیر را اعمال کنیم:



<sessionState mode=”StateServer” stateConnectionString="tcpip=127.0.0.1:55455" sqlConnectionString="data source=127.0.0.1;user id=sa;password='' cookieless="false" timeout="20" />

در زیر توضیحی مختصر راجع به پارامترهای بالا را ذکر میکنم:

Mode : درواقع حالت ذخیره سازی است که میتواند یکی از دو مقدار StateServer یا SqlServer باشد در اینجا چون میخواهیم از روش StateServer استفاده کنیم مقدار Mode را مساوی StateServer قرار میدهیم.


stateConnectionString :connection string که از آن برای مشخص کردن موقعیت State Service استفاده میشود .


sqlConnectionString :connection string مربوط به SqlServer میباشد که البته برای State Server لازم نیست ولی برای حالت SqlServer لازم است چون در این نوع از ذخیره سازی از SqlServer استفاده میشود.


Cookieless : در صورت تمایل برای نگه داشتن مقدار Session در سمت Client بعد از قطع اتصال بین سایت و Client میتوان مقدار این گزینه را False کرد ولی من که این کار را مفید نمیبینم پس با True کردن این مقدار اجازه ذخیره شدن اطلاعات مربوط بهSession را ندهید .


Timeout: در واقع این item طول عمر یک Session را بر حسب دقیقه بیان میکند .


البته این تگ item های دیگری هم دارد که من توضیح نمیدم ولی حتما قبل از استفاده از Session ها یه نگاهی به این گزینه ها بکنید به طور مثال یکی از گزینه هائی که نگفتم در مورد رمز کردن اطلاعات داخل Sessionو نگه داشتن این اطلاعات در کامپیوتر Client میباشد.



2-SqlServer


انتخاب دوم برای ذخیره سازی Session ها SqlServer 2000 میباشد . برای ذخیرهسازی اطلاعات مربوط به یک Session با استفاده از SqlServer مراحل زیر را دنبال کنید:



1- با استفاده از ابزا Query Analyser اسکریپت InstallSqlSate.sql را اجرا کرده تا DataBase مورد نیاز برای ذخیره سازی Session در SqlServer ایجاد شود . لازم به ذکر است که فایل InstallSqlState.sqlدر مسیر زیر است:


systemroot\Microsoft.NET\Framework\versionNumber


2- در مرحله دوم لازم است تا تنظیمات لازم را به مانند آنچه در StateServer انجام دادیم ، انجام دهیم .


برای این کار لازم است تا تغییرات زیر را در فایل web.config انجام دهیم:




<sessionState mode=”SqlServer” sqlConnectionString=” data source=SERVERNAME;user id=sa;password=;” />

البته اطلاعات دیگر را به مانند آنچه در State Server دیدید قرار دهید.

SqlServer امکان به اشتراک گذاشتن اطلاعات مربوط به یک Session را بین چند سایت یا حتی چند Server ممکن میسازد ولی تنها ایراد این روش در این است که SqlServer نسبت به Session State کندتر است و از این لحاظ بهتر است که از StateServer استفاده کنیم .



3-Error Handling


Error handling یکی از قسمت های خیلی مهم در هر پروژه تحت وب میباشد . امکان رخ دادن هر نوع Error وجود دارد بنابراین بایستی راهی را برای مقابله با این error ها در نظر بگیریم . ASP.net با استفاده از فایل Web.config به ما این امکان را میدهد که Error ها را کنترل کنیم .


بطور مثال برای کنترل error 404 به شکل زیر عمل میکنیم :


<customErrors mode=”On”>

<error statuscode=”404” redirect=”notfound.aspx” />

</customErrors>




چند خط کد فوق برای این است که در هنگام رخدادن error 404 که مربوط به یافت نشدن صفحه است بجای نمایش این error به صفحه notfound.asp برود . چنانچه Mode=””Off باشد در این صورت در هنگامی که یک Error رخ دهد همان error برای کاربران نهائی نمایش داده میشود .



4-security(authentication)


یکی از جنبه های مهم هر برنامه تحت وب امنیت آن است . ASP.net امکانات مناسبی را در زمینه امنیت ایجاد کرده است که میتوانیم بر حسب نیاز از این امکانات استفاده کنیم .یکی از امکاناتی که .net در زمینه امنیت ارائه داده است اعتبارسنجی کاربران است که از سه طریق این عمل ممکن میشود:



1-Windows Authentcation


Windows authentication به شما این امکان را میدهد تا از اکانت های کاربران در ویندوز استفاده کنید . این سرویس از IIS استفاده میکند . و بعد از اعتبارسنجی کاربران اطلاعات کاربری تائید شده را برای کد برنامه شما ارساال می کند . اگر شما مایل به این هستید که بدانید کدام کاربر ویندوز از برنامه های ASP.net استفاده میکند با استفاده از Property زیر میتوانید این اطلاعات را بدست آورید :


User.Identify.Name;

این Property کلمه کاربری(username) کاربر فعلی را در خود دارد .



2-Passport Authentication


این نوع از اعتبارسنجی کاربران برای اعتبارسنجی از سرویس Passport محصول شرکت Microsoft استفاده میکند . برای استفاده از این سرویس میبایستی این سرویس را خریداری کنید .



3-Forms Authentication


این نوع از اعتبارسنجی کاربران برای اعتبارسنجی از Form های Login که در بیشتر سایت ها میبینیم استفاده میکنند . این نوع از اعتبارسنجی به واقع بیشترین استفاده را در میان سه نوع اعتبار سنجی دارد .بارها شده در سایت هائی رفته و اجازه مشاهده یک سری از صفحات فقط در صورت Login کردن به شما داده میشود در واقع در چنین سایت هائی از Forms Authentication استفاده میشود . این مبحث بسیار گسترده است و نیاز به یک آموزش کامل در مورد اعتبار سنجی کاربران از طریق Forms Authentication وجود دارد ان شاء الله در آینده نزدیک در این مورد بیشتر صحبت خواهیم کرد در انتهای این قسمت قطعه کد لازم برای اعتبار سنجی کاربران به روش Forms authentication را میاوریم:


<authentication mode=”Forms”>

<form loginUrl=”login.aspx” timeout=”20” / >

</authentication>

<authorization>

<deny users=”?” />

</authorization>

حرف آخر:همانطور که مشاهده فرمودید فایل web.config نقش بسیار مهمی را در یک برنامه ASP.net بازی میکند و امکانات زیادی این فایل در اختیار شما قرار می دهد . شناخت این فایل برای یک برنامه نویس تحت وب بسیار لازم است

استفاده از چند فایل web.config در یک برنامه ASP.net:


امکان استفاده از چند فایل Web.config در یک برنامه ASP.net میسر میباشد . در واقع چنانچه در داخل یک شاخه از یک برنامه تحت وب یا به عبارت ساده تر یک سایت یک فایل web.config قرار دهیم شرایطی که در این فایل مشخص میشود بر مشخصات و شرایطی که در فایل web.config شاخه اصلی سایت است ارجعیت دارد و چنانچه پیکربندی در فایل web.config شاخه اصلی وجود داشته باشد که درآن فایل دوم نباشد این پیکربندی برای آن زیر شاخه نیز صادق است .در نتها لازم به ذکر است که محدوده دید یک فایل web.config در همان شاخه و تمام زیر شاجه هائی است که در آن شاخه که خود فایل قرار دارد میباشد .بنابراین شرایطی که در فایل web.config که در شاخه اصلی یک سایت قرار دارد برای تمام فایل ها و زیر شاخه های آن صادق است .
 
آخرین ویرایش:

Masterhame

New member
سلام

مي خوام يه مقدار راجع به Form Authentication بحث كنم

يه نمونه كاربردي و ساده

شما مي تونيد سايتتون رو به بخشهاي مختلفي تقسيم كنيد. مثلاً يك بخش مخصوص كاربران ميهمان و يك بخش هم مخصوص كاربراني كه به سايت شما Log In كردن

يه روش ساده اينه كه هركي با سايت شما وارد شد اون رو به يك Folder كه حاوي اطلاعات عموميتون هست منتقل كنيد و بقيه سايت رو فقط در اختيار كاربران خاص خودتون قرار بديد.

فايل Web.Config بصورت موضعي و محلي عمل مي كنه. يعني شما ميتونيد توي هر Folder از سايتتون يه فايل Web.Config داشته باشيد كه تنظيمات دسترسي به اون Folder رو براتون اجرا بكنه

خوب!


حالا من يك فايل Web.Config براي Folder اصلي سايت مي سازم و يك Web.Config براي Folderي كه اسمشو ميگذارم Public (يعني هر كي اومد توي سايت بتونه محتويات اين شاخه رو ببينه)

بخش مربوط به Authentication توي Folder اصلي رو اينجوري مينويسيم:

کد:
<authentication mode="Forms" >
<forms loginUrl="default.aspx" />
</authentication>

خوب يه بخش ديگه هم نياز هست كه بايد بنويسيد تا مشخص كنه كه به اين Folder از سايت چه كاربراني اجازه دسترسي دارند. براي اين منظور كد زير رو مي نويسم:

کد:
<authorization>
<deny users="?"/>
</authorization>

اين كد داره ميگه مه ورود تمام كاربران ناشناس بايد لغو بشه (يا همون deny)

يه تگ ديگه هم ميشه توي تگ Authorization نوشت به اسم allow
اين تگ مشخص مي كنه كه چه كاربراني مجاز به ورود هستند.

اونجايي كه علامت سوال (؟) گذاشته شده رو توضيح بدم:
شما بجاي علامت سوال مي تونيد از ؟ از * و يا از نام يك كاربر خاص (مثلاً hasan) استفاده كنيد.
؟ يعني تمام كاربران ناشناس
* يعني تمام كاربران شناسايي شده



توي Folderي كه اسمش رو گذاشتم Public هم يك فايل Web.Config ميسازيم كه كل محتوياتش اين هست:

کد:
<configuration>
    <appSettings/>
	
	
	
    <connectionStrings/>
    <system.web>
		
		<authorization>
			<allow users="?"/>
      		</authorization>

	</system.web>
</configuration>


اگه دقت كرده باشيد متوجه شديد كه بخش Authorization اين فايل داره ميگه ورود تمام كاربران ناشناس مجاز هست.

به اين ترتيب ما يك Folder درست كرديم كه كاربراي ميهمان مي تونن توي اون به اطلاعات مورد نظر ما دسترسي پيدا كنن و كاربران اصلي ما به كل سايت دسترسي دارن. البته بعد از اجراي عمليات LogIn!!!




خوب!
يه كوچولو هم راجع به روش LogIn بحث كنيم

اصلاً سخت نيست كافيه شما يه فرم LogIn بسازيد يا توي همون صفحه اصليتون 2 تا TextBox و يه Button براي Login هرجاش كه دوست داريد اضافه كنيد.

بعدش توي Button نام كاربري و رمز رو از كاربرتون بگيريد، هر جور دوس داريد بررسي بكنيد و در صورتي كه از نظرتون صحيح بود اين يك خط رو توي Button بنويسيد:

کد:
FormsAuthentication.RedirectFromLoginPage("Hasan", false);

البته بجاي Hasan ميتونيد به هر روشي كه دوست داريد نام كاربري مورد نظرتون رو وارد كنيد:نیش:

اميدوارم تا جايي كه ممكنه فشرده و كاربردي بحث كرده باشم.

اگه سوالي داشتيد بپرسيد جواب ميدم:سوت:
 

Cube

متخصص بخش هاستینگ و دامین
سلام ممنون . مثل همیشه عالی بود
نکته : تگ های <authentication mode="Forms" > و <authorization> تو تگ <system.web> باید اضافه بشه.

چند عدد سوال :

1- false اینجا یعنی چی ؟
FormsAuthentication.RedirectFromLoginPage("Hasan", false);

2- خودش می فهمه که کاربرای ناشناس باید redirect بشن به فولدر Public ؟
کد نویسی نمی خواد ؟
 
آخرین ویرایش:

Cube

متخصص بخش هاستینگ و دامین
1-Database Connections
یکی از مهمترین چیزهائی که در یک فایل web.config قرار میگیرد اطلاعات مربوط به connection string میباشد. دلیل قرار دادن یک connection string در یک فایل web.config زمانی مشخص میشود که قرار باشد که جای database خود را تغییر دهیم . در این حالت فقط کافی است که اطلاعات مربوط به connection string را در فایل web.config تغییر دهیم در صورتیکه اگر اطلاعات مربوط به connection string را در خود application قرار دهیم برای تغییر database باید تعداد زیادی از فایل های موجود در پروژه را تغییر دهیم و این کار زمانگیری است و بعلاوه ویژگی قابل حمل بودن یک برنامه را فوق العاده پائین می آورد . البته من زیاد با قرار دادن اطلاعات مهمی چون connectionstring به صورت خام زیاد موافق نیستم . اگر از این روش استفاده میکنید من توصیه میکنم که اطلاعات مربوط به connection string را رمز کرده و مقدار رمز شده را در فایل web.config قرار دهید . البته لازم به ذکر است که در رمز کردن از Hashing استفاده نکنید دلیلش رو اگه نمیدونید برید و مقاله قبلی که در مورد hashing هست رو یه مطالعه ای بکنید.در مثال زیر نحوه قرار دادن اطلاعات مربوط به یک Connection string را میبینیم:


<configuration>

<appSettings>

<add key=”ConnectionString” Value=”server=home;uid=sa;password=;” />

</appSettings>

</configuratrion>

همانطور که دیدید قراردادن اطلاعات مربوط به connection string در یک فایل web.config بسیار آسان است connection string با استفاده از key که در اینجا ConnectionString میباشد مورد ارجاء قرار میگیرد و value مشخص کننده مقدار این key میباشد.در حاشیه این قسمت بد نیست اگه یه سری به سایت www.connectionstring.com بزنید و در آنجا از وجود مجموعه زیادی از connection string های مختلف مربوط به DBMS های مختلف لذت ببرید. دستیابی به این key ها در یک Application بسیار آسان است .

برای دستیابی به key در یک application به شکل زیر عمل میکنیم:


Using System.Configuration;

String connection_string = ( string ) ConfigurationSettings.Appsettings[“ConnectionString”];


همانطور که گفتم گرفتن اطلاعات مربوط به یک connection string و استفاده از آن در یک Application بسیار آسان است .



در زمان کار ، بسیازی تماس می گرفتند و بیان می نمودند که سایتشون هک شده ....... چرا یک سایت به راحتی هک میشه ؟

یکی از مهمترین اطلاعات در بحث وب ، اطلاعات دیتابیس است که برنامه نویسان با خیال راحت در فایل web.config می نویسند ...

با توجه به همه گیر شدن روش های هک فایل web.config ، برنامه نویس های نیمه حرفه ای و حرفه ای اطلاعات دیتابیس خود را این فایل نمی نویسند .

برای اتصالات به دیتابیس خود یک کلای زراحی می نمایند و کانکشن (اطلاعات حساس دیتابیس) را درون این کلاس قرار می دهند، سپس کل کلاس را DLL می نمایند و در پوشه bin سایت که دارای امنیت بالایی است قرار می دهند ....

به این صورت امکان دست یابی به اطلاعات حساس دیتابیس ناممکن می شود .....
 
بالا