همانطور که حتما مستحضر می باشید، محتویات ViewStateدر صفحات وب به صورت کد شده
ای ذخیره می شوند. اما این محتویات به سادگی قابل نمایش و بررسی می باشند و در نتیجه هرگز
نباید اطلاعات حساس خود را در این ویژگی ذخیره نمایید.
اما در عمل گاهی به واقع نیاز می شود که اطلاعات نسبتا حساسی را در برخی صفحات
در ویژگی ViewStateذخیره نماییم. قبلا در
مقاله ای به معرفی روشی جهت رمزنگاری
ViewState پرداخته ایم. در این مقاله به معرفی روش دیگری جهت رفع این مشکل می پردازیم.
یکی از ویژگی های موجود در صفحات وب
ViewStateEncryptionMode می باشد. با استفاده از این ویژگی می توان مشخص نمود که محتویات ViewState به صورت رمز شده در صفحات ذخیره شود یا خیر.
در قسمت زیر مثالی از نحوه روش استفاده از ViewStateEncryptionMode را ملاحظه می
نمایید.
<%@
Page
Language="C#"
ViewStateEncryptionMode="Auto"
%>
ویژگی ViewStateEncryptionMode می تواند حاوی سه مقدار باشد:
- Never: در صورتی که مقدار Never را به ویژگی ViewStateEncryptionMode
اختصاص دهیم، محتویات ViewState بدون هیچ گونه رمز نگاری در صفحات ذخیره می
شوند.
- Always: در صورتی که این مقدار را انتخاب نماییم، محتویات ViewState به
صورت رمز نگاری شده در صفحه وب ذخیره می شوند. هنگامی که محتویات ViewState به
سرور ارسال می شود (هنگام انجام عملیات PostBack)، ابتدا محتویات رمز گشایی (Decrypt) شده و مورد استفاده قرار
می گیرد و سپس محتویات جدید مجددا رمزنگاری (Encrypt) شده و برای صفحه وب ارسال
می شود. در نتیجه در صورتی که نیاز دارید محتویات ViewState به شکل رمزشده در
صفحه ذخیره شود، می توانید از این روش استفاده نمایید.
- Auto: این مقدار، مقدار پیشفرض ویژگی ViewStateEncryptionMode می باشد. در
این حالت محتویات ViewState به طور پیشفرض بدون هیچگونه رمزنگاری در صفحه ذخیره
می شوند ولی در صورتی که هر کدام از کنترل های موجود در صفحه هنگامی که در حال
ایجاد شدن هستند، متد Page.RegisterRequiresViewStateEncryption را فراخوانی
نمایند، محتویات ViewState به شکل رمزنگاری شده در صفحه ذخیره می شود.
نکات مهم:
- برای رمزنگاری ViewState از کلیدی که در قسمت<machineKey> قرار دارد استفاده می
شود.
- بدیهی می باشد که عمل رمزنگاری و رمزگشایی مقداری زمانبر بوده و دارای
هزینه هایی می باشد و روی سرعت و راندمان صفحات وب تاثیر منفی می گذارد. بنابراین
تنها زمانی محتویات ViewState را رمزنگاری کنید که حتما بدان نیاز می باشد.