大家都知道酒酿蛋是非常传统的美胸食品产后丰胸产品,醪糟也叫酒酿,是由糯米或者大米经过酵母发酵而制成的一种风味食品,其产热量高,富含碳水化合物丰胸产品燕窝酒酿蛋、蛋白质、b族维生素、矿物质等,这些都是人体不可缺少的营养成分酒酿蛋丰胸方法。其中酒酿中含的醣化酵素,能促进乳房的二次发育,具有美胸的作用燕窝酒酿蛋丰胸
State Management در ASP. NET 2.0 (بخش دوم)
اين مطلب از طريق سايت شرکت سخاروش در اختيار شما گذاشته شده است .

State Management در ASP. NET 2.0

State Management در ASP. NET 2.0 (بخش دوم)
در بخش اول به ضرورت مديريت 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 يكی از مقادير زير را می توان نسبت داد  :

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


استفاده از اين مطلب  با ذکر منبع و اهداف غيرانتفاعی بلامانع است .
http://www.srco.
ir