رمزنگاری و الگوریتم آن که به وسیله سیستم احراز هویت فرمها برای رمزنگاری و ارزیابی برچسب استفاده میشوند از طریق عنصر <machineKey> در Web.config قابل تغییر هستند. در جدول زیر مقادیر و توضیحات آنها آورده شده است:
نشانههای عنصر <machineKey>
نشانه (Attribute) | توصیف (Description) |
Decryption | الگوریتم استفاده شده برای رمزنگاری را مشخص میکند. · Auto: پیش فرض، براساس طول نشانه decryptionKey الگوریتم پایه را تعیین میکند. · AES: الگوریتم Advanced Encryption Standard (AES) را به کار میگیرد. · DES: الگوریتم Data Encryption Standard (DES) را استفاده میکند. این الگوریتم با محاسبات ضعیف طراحی شده است و نباید به کار گرفته شود. · 3DES: الگوریتم Triple DES را پیاده سازی میکند که با اعمال سه بار الگوریتم DES، کار میکند. |
decryptionKey | کلید مخفی که برای الگوریتم رمزنگاری استفاده میشود. این مقدار باید یک رشته در مبنای شانزده با طول مناسب باشد، “AutoGenerate”، و یا مقدار، با “IsolateApps” پیوست گردد. اضافه کردن “IsolateApps” در حکم راهنماییASP.NET برای استفادهی مقدار یکتا برای هر برنامه میباشد. پیش فرض “AutoGenerate,IsolateApps” است. |
Validation | الگوریتم استفاده شده برای ارزیابی را تعیین میکند. · AES: الگوریتم Advanced Encryption Standard (AES) را به کار میگیرد. · MD5: الگوریتم Message-Digest 5 (MD5) را استفاده میکند. · SHA1: پیش فرض، الگوریتم SHA1 را به کار میگیرد. · 3DES: الگوریتم Triple DES را استفاده میکند. |
validationKey | کلید مخفی که برای الگوریتم ارزیابی استفاده میشود. این مقدار باید یک رشته در مبنای شانزده با طول مناسب باشد، “AutoGenerate”، و یا مقدار، با “IsolateApps” پیوست گردد. اضافه کردن “IsolateApps” در حکم راهنماییASP.NET برای استفادهی مقدار یکتا برای هر برنامه میباشد. پیش فرض “AutoGenerate,IsolateApps” است. |
به طور پیش فرض، کلید مورد استفاده برای رمزنگاری و ارزیابی به طور خودکار برای هر برنامهای ایجاد میشود، و این کلید در [1]LSA نگهداری میشود. به طور خلاصه، تنظیمات پیش فرض، کلید یکتا برای هر وب سرور و هر برنامه را تضمین میکند.
برچسب احراز هویت فرمها از طریق سیم، در یک کوکی و یا در داخل نشانی انتقال پیدا میکند. همچنین، جهت شناسایی، برچسب احراز هویت میتواند شامل اطلاعات کاربر نیز باشد. در نتیجه، این خیلی مهم است که اطلاعات برچسب دور از چشمان هکر رمزگذاری شده باشد و سیستم احراز هویت فرمها بتواند تضمین کند که هکر نمیتواند از برچسب استفاده کند. برای اطمینان از پنهان بودن دادهها، سیستم احراز هویت فرمها میتواند دادههای برچسب را رمزنگاری کند. ناتوانی در رمزنگاری دادههای برچسب، اطلاعات بالقوه مهم در یک متن ساده ارسال میشود.
برای تضمین صحت برچسب، سیستم احراز هویت فرمها باید برچسب را ارزیابی کند. ارزیابی، عملکردی است برای اطمینان از این که قسمتی از داده تغییر نکرده است و از طریق MAC[1] انجام میگیرد. به طور خلاصه، MAC یک قسمت کوچکی از اطلاعات است که دادهای را که نیاز به ارزیابی دارد را شناسایی میکند (در اینجا، برچسب).
اگر اطلاعات نمایش داده شده توسط MAC تغییر کرده باشد، MAC و داده مطابقت پیدا نمیکنند. علاوه بر این، تغییر داده و تولید MAC جدید و مطابقت آن دو، برای هکر محاسبات خیلی دشواری خواهد داشت.
وقتی یک برچسب ایجاد میشود، سیستم احراز هویت فرمها یک MAC ایجاد و آن را به دادههای برچسب پیوست میکند.
اینکه چه اقدامات امنیتی به برچسب احراز هویت اعمال میشود به تنظیمات protection در عنصر <forms> بستگی دارد. تنظیمات protection میتواند یکی از موارد زیر باشد:
· All: گزینه پیش فرض، برچسب هم رمزگذاری میشود و هم امضاء دیجیتالی.
· Encryption: فقط رمزگذاری میشود، MAC تولید نمیشود.
· None: برچسب نه رمزگذاری و نه امضاء دیجیتال میشود.
· Validation: یک MAC تولید میشود، اما دادههای برچسب به صورت متن ساده فرستاده میشود.
مایکروسافت قویا پیشنهاد میکند از گزینه All استفاده کنید.
کوکیها یک واسط نگهدارنده اطلاعات مرورگر در هر درخواست برای یک سایت خاص هستند. اگر کوکیها پشتیبانی نمیشوند، یک روش جایگزین باید برای فرستادن برچسب احراز هویت از مرورگر به سرور به کار گرفته شود. یک راه حل عمومی در محیط بدون کوکی استفاده از رمزگذاری محتویات کوکی در داخل نشانی است.
بهترین روش برای اینکه ببینید چگونه اطلاعات میتوانند در داخل نشانی قرار داده شوند این است که سایت را برای برچسب احراز هویت بدون کوکی تنظیم کنید. این خواسته با اعمال تنظیم پیکربندی cookieless به مقدار UseUri قابل انجام است:
<authentication mode="Forms">
<forms
cookieless="UseUri"
slidingExpiration="true"
timeout="60"
/>
</authentication>
بعد از انجام این تغییرات، سایت را با استفاده از مرورگر ببینید. وقتی که به عنوان یک ناشناس سایت را میبینید، نشانی دقیقا همانگونه که هست دیده میشود. برای مثال، وقتی صفحه Default.aspx را میبینید، در نوار آدرس نشانی زیر را میبینید:
http://localhost:2448/ASPNET_Security_Tutorial_03_CS/default.aspx
ولی وقتی وارد سایت میشوید، برچسب احراز هویت فرمها در داخل نشانی قرار داده شده است. به عنوان مثال، بعد از دیدن صفحه ورود و وارد شدن با نام Sam، نشانی زیر دیده خواهد شد:
http://localhost:2448/ASPNET_Security_Tutorial_03_CS/(F(jaIOIDTJxIr12xYS-VVgkqKCVAuIoW30Bu0diWi6flQC-FyMaLXJfow_Vd9GZkB2Cv-rfezq0gKadKX0YPZCkA2))/default.aspx
برای صحیح کار کردن احراز هویت بدون کوکی، سیستم باید تمام نشانیهایی که شامل دادههای برچسب احراز هویت فرمها هستند را رمزگذاری کند، در غیر این صورت، برچسب احراز هویت هنگامی که کاربر روی پیوند کلیک میکند، از بین خواهد رفت. خوشبختانه، این منطق، به طور خودکار انجام میشود. برای نمایش این عملیات، صفحه Default.aspx را باز کرده و یک کنترل HyperLing در آن قرار دهید، مشخصههای Text و NavigateUrl را به ترتیب برابر “Test Link” و “SomePage.aspx” قرار دهید. مهم نیست که در پروژه ما صفحهای با نام SomePage.aspx وجود ندارد.
تغییرات صفحه Default.aspx را ذخیره کرده و آن را به وسیله مرورگر ببینید. وارد سایت شوید. سپس در صفحه Default.aspx بر روی پیوند “Test Link” کلیک کنید. چه اتفاقی افتاد؟ اگر صفحهای با نام SomePage.aspx وجود نداشته باشد، خطای 404 اتفاق میافتد، اما خطا برای ما مهم نیست. به جای آن، بر روی نوار آدرس مرورگر تمرکز کنید. میبینید که برچسب احراز هویت فرمها در داخل نشانی قرار داده شده است:
http://localhost:2448/ASPNET_Security_Tutorial_03_CS/(F(jaIOIDTJxIr12xYS-VVgkqKCVAuIoW30Bu0diWi6flQC-FyMaLXJfow_Vd9GZkB2Cv-rfezq0gKadKX0YPZCkA2))/SomePage.aspx
نشانی “SomePage.aspx” به طور خودکار به نشانی که شامل برچسب احراز هویت باشد، تبدیل شده است، ما کدی برای این کار ننوشتیم. برچسب احراز هویت فرمها به طور خودکار در داخل نشانی تمام پیوندها به جز پیوندهایی که با “http://” و یا “/” شروع میشوند، قرار داده میشود. مهم نیست که پیوند در داخل Respons.Redirec یک کنترل HyperLink فراخوانی میشود و یا داخل یک عنصر HTML مانند <a href=”…”>.