تبلیغات
آموزشASP.NET - State Management در ASP. NET 2.0 (بخش دوم)
 
فردا روشن اسن به
آموزشASP.NET
صفحه نخست         تماس با مدیر         پست الکترونیک        RSS         ATOM
 
 
سه شنبه 24 اسفند 1389 :: نویسنده : ارش کاکاوند
در بخش اول به ضرورت مدیریت state در برنامه های وب اشاره و در ادامه به بررسی اولین گزینه موجود (view state ) پرداختیم . در این بخش با  نحوه ایمن سازی اطلاعات ذخیره شده در view state  آشنا خواهیم شد . 
اطلاعات view state در یك رشته درهم آمیخته مشابه زیر ذخیره می گردد . 

<input type="hidden"
          name="__VIEWSTATE"
          value="/wEPDwUKMTUyMzMyNzc3NGRklXVE/6qqfC5AWkr1Yw0Xu5IpHg0="
 />

به موازات اضافه كردن اطلاعات بیشتر به view state ، طول این رشته طولانی تر خواهد شد .  با توجه به این كه مقدار ذخیره شده در رشته فوق به صورت متن شفاف نمی باشد ، بسیاری از برنامه نویسان ASP.NET بر این باور هستند كه داده ذخیره شده در view state به صورت رمز شده است .ولی واقعیت اینچنین نیست .  در واقع ، اطلاعات view state به سادگی در حافظه به یكدیگر متصل شده و به یك رشته Base64 تبدیل می شوند .یك هكر باهوش می تواند با استفاده از مهندسی معكوس رشته فوق ، view state را بررسی و از اطلاعات ذخیره شده در آن به سرعت آگاه گردد .

كد زیر نحوه رمز كردن یك رشته معمولی را به یك رشته Base64 نشان می دهد .

Private Function EncodeBase64(ByVal input As String) As String
 Dim strBytes() As Byte = System.Text.Encoding.UTF8.GetBytes(input)
 
Return System.Convert.ToBase64String(strBytes)
End Function

كد زیر نحوه رمز گشائی یك رشته Base64 را به یك رشته معمولی نشان می دهد .

Private Function DecodeBase64(ByVal input As String) As String
  Dim strBytes() As Byte = System.Convert.FromBase64String(input)
  Return System.Text.Encoding.UTF8.GetString(strBytes)
End Function

در صورتی كه لازم است اطلاعات ذخیره شده در view state دارای ایمنی بیشتری باشند از دو گزینه مختلف می توان استفاده كرد :

گزینه اول : به ASP. NET اعلام شود كه از یك hash code استفاده نماید. برخی اوقات از  hash code به عنوان یك checksum قدرتمند پنهانی نیز یاد می شود . در چنین مواردی ، ASP. NET تمامی داده ذخیره شده در view state را بررسی و یك الگوریتم hashing را بر روی آن اعمال می نماید . الگوریتم فوق یك سگمنت كوتاه از داده را ایجاد می نماید كه در واقع همان hash code است . در ادامه ، كد فوق به انتهای داده ذخیره شده در view state اضافه می گردد .
 زمانی كه صفحه post back می گردد ، ASP. NET داده موجود در view state را بررسی و مجددا" hash code را با استفاده از فرآیندی مشابه تولید می نماید . در ادامه مقدار محاسبه شده با مقدار موجود در رشته مقایسه می گردد تا این اطمینان حاصل شود كه داده ذخیره شده در view state تغییر نكرده باشد . 
در صورتی كه یك كاربر بداندیش بخشی از  داده موجود در view state را تغییر دهد ، ASP. NET یك hash code را تولید خواهد كرد كه با كد ذخیره شده در انتهای view state مطابقت نخواهد كرد . در صورت تحقق چنین شرایطی ،  postback  بطور كامل نادیده گرفته خواهد شد . 
شاید در ذهن شما این موضوع مطرح شده باشد كه یك كاربر باهوش می تواند با بكارگیری ترفندهائی بر مشكل اشاره شده غلبه كرده و علاوه بر تولید اطلاعات نادرست  ، یك   hash code مناسب و منطبق بر اطلاعات ذخیره شده در view state را نیز تولید نماید . در پاسخ می بایست به این نكته اشاره كرد كه كاربران بداندیش قادر به تولید hash code صحیح نخواهند بود چراكه آنان دارای كلید رمزنگاری مشابه ASP. NET نمی باشند . این بدان معنی است كه hash code تولید شده با وضعیت موجود نمی تواند مطابقت نماید .
 hash code  بطور پیش فرض فعال است . بنابراین در صورت تمایل به استفاده از پتانسیل فوق  ، لازم نیست كه مراحل اضافه ای را دنبال نمود . در برخی موارد پیاده كنندگان ویژگی فوق را غیرفعال می نمایند تا از مشكلات احتمالی موجود در یك web farm پیشگیری نمایند . در چنین وضعیتی ،  سرویس دهندگان مختلف دارای كلیدهای مختلفی می باشند و مشكل زمانی اتفاق می افتد كه پس از post back صفحه ، یك سرویس دهنده جدید آن را دریافت نماید .
در یك محیط web farm كلید می بایست در بین تمامی سرویس دهندگان یكسان باشد . در صورتی كه كلید یكسان نباشد و صفحه برای یك سرویس دهنده متفاوت با سرویس دهنده ای كه صفحه را ایجاد كرده است ، post back گردد ، یك خطاء ایجاد خواهد شد .بنابراین در یك محیط web farm ، می بایست پیاده كنندگان یك كلید را در فایل Machine.config مشخص نمایند ( در مقابل این كه به ASP.NET اجازه داده شود كه این كلید را بطور اتوماتیك ایجاد نماید) .
برای غیرفعال كردن hash codes ، می بایست از خصلت enableViewStateMac عنصر <pages> در فایل web.config  و یا machine.config  به صورت زیر استفاده كرد . 

<configuration >
  <system.web>
     <pages enableViewStateMac="false" />
          ...
  </system.web>
</configuration>

 گزینه دوم : با ایجاد یك كد hash ، فریمورك  ASP. NET این موضوع را بررسی خواهد كرد كه آیا داده ذخیره شده در view state دستكاری شده است ؟ علی رغم ایجاد این لایه امنیتی ، داده موجود در view state همچنان قابل مشاهده توسط كاربران بداندیش خواهد بود .
در صورتی كه بر روی داده ذخیره شده در view state حساسیت زیادی وجود داشته باشد و بخواهیم امنیت آن را افزایش دهیم ، می بایست رمزنگاری view state را فعال كرد . برای فعال كردن ویژگی فوق از خصلت  ViewStateEncryptionMode  به همراه دایركتیو page استفاده می گردد .

<%@Page ViewStateEncryptionMode="Always" %>

در صورت تمایل می توان از خصلت فوق در فایل پیكربندی نیز استفاده كرد . 

<configuration >
  <system.web>
     <pages viewStateEncryptionMode="Always" />
          ...
  </system.web>
</configuration>

به خصلت  ViewStateEncryptionMode یكی از مقادیر زیر را می توان نسبت داد  :

  • Always : همواره رمزنگاری انجام می شود .

  • Never : رمزنگاری انجام نخواهد شد .

  • Auto : رمزنگاری صرفا" در مواردی كه یك كنترل با صراحت آن را درخواست نماید ، انجام خواهد شد .

 گزینه پیش فرض Auto است . این بدان معنی است كه یك كنترل با فراخوانی متد Page.RegisterRequiresViewStateEncryption رمزنگاری را درخواست می نماید . در صورتی كه یك كنترل به دلیل عدم داشتن اطلاعات حساس از متد فوق استفاده نكند ، view state رمز نخواهد شد و عملیات بیشتری جهت رمزنگاری به سیستم تحمیل نخواهد شد . به عبارت  دیگر ، یك كنترل زمانی می تواند دل خود را به خدمات ارائه شده توسط متد فوق خوش نماید كه مقدار خصلت viewStateEncryptionMode ، معادل Auto در نظر گرفته شده باشد . در صورتی كه مقدار خصلت فوق Never در نظر گرفته شده باشد ، به درخواست كنترل ها جهت رمزنگاری پاسخ داده نخواهد شد.
با توجه  به این كه رمزنگاری عملیات بیشتری را به سرویس دهنده وب تحمیل می نماید ( هم در زمان رمزنگاری و هم در زمان رمزگشائی پس از هر post back ) در صورت عدم نیاز به پتانسیل فوق و به منظور عدم تاثیرگذاری آن بر روی كارآئی برنامه های وب ، ضرورتی به فعال كردن آن وجود ندارد . 
در بخش سوم بحث بر روی  State Management را ادامه داده و بررسی نحوه نگهداری Member Variables و اشیاء سفارشی در view state  خواهیم پرداخت . 
 





نوع مطلب :
برچسب ها :
لینک های مرتبط :


شنبه 18 شهریور 1396 09:21 ق.ظ
Thanks for sharing your thoughts about State.
Regards
سه شنبه 14 شهریور 1396 07:04 ق.ظ
Hey there! This is my first comment here
so I just wanted to give a quick shout out and say I truly
enjoy reading through your articles. Can you suggest any
other blogs/websites/forums that cover the same subjects?
Thank you!
چهارشنبه 1 شهریور 1396 12:33 ب.ظ
Hi, after reading this awesome paragraph i am too cheerful
to share my knowledge here with mates.
 
لبخندناراحتچشمک
نیشخندبغلسوال
قلبخجالتزبان
ماچتعجبعصبانی
عینکشیطانگریه
خندهقهقههخداحافظ
سبزقهرهورا
دستگلتفکر


درباره وبلاگ

سلام من آرش کاکاوند دانشجوی رشته کامپیوتر هستم و ورود شما رابه دنیای aspخوش امدمیگم.حتما نظر بدین تا من کارم رو بهتر ادامه بدم

مدیر وبلاگ : ارش کاکاوند
مطالب اخیر
نویسندگان
صفحات جانبی
نظرسنجی
شما کدام یک از برنامه های زیر را برای طراحی وب انتخاب می کنید؟








جستجو

آمار وبلاگ
کل بازدید :
بازدید امروز :
بازدید دیروز :
بازدید این ماه :
بازدید ماه قبل :
تعداد نویسندگان :
تعداد کل پست ها :
آخرین بازدید :
آخرین بروز رسانی :