پیاده سازی امنیت در یک سایت دارای جنبه های زیر است:
احراز هویت: فرآیند اطمینان از هویت و اصالت کاربر است. ASP.NET به چهار نوع احراز هویت اجازه می دهد:
احراز هویت ویندوز
احراز هویت فرم ها
احراز هویت گذرنامه
احراز هویت سفارشی
مجوز: فرآیند تعریف و تخصیص نقش های خاص به کاربران خاص است.
محرمانه بودن: شامل رمزگذاری کانال بین مرورگر مشتری و وب سرور است.
یکپارچگی: شامل حفظ یکپارچگی داده ها می شود. به عنوان مثال، پیاده سازی امضای دیجیتال.
احراز هویت مبتنی بر فرم
به طور سنتی، احراز هویت مبتنی بر فرم شامل ویرایش فایل web.config و افزودن یک صفحه ورود به سیستم با کد احراز هویت مناسب است.
فایل web.config را می توان ویرایش کرد و کدهای زیر را روی آن نوشت:
<configuration>
<system.web>
<authentication mode="Forms">
<forms loginUrl ="login.aspx"/>
</authentication>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
...
...
</configuration>
صفحه login.aspx ذکر شده در قطعه کد بالا میتواند کد زیر را در پشت فایل با نامهای کاربری و رمزهای عبور برای احراز هویت در آن کدگذاری شده داشته باشد.
protected bool authenticate(String uname, String pass)
{
if(uname == "Tom")
{
if(pass == "tom123")
return true;
}
if(uname == "Dick")
{
if(pass == "dick123")
return true;
}
if(uname == "Harry")
{
if(pass == "har123")
return true;
}
return false;
}
public void OnLogin(Object src, EventArgs e)
{
if (authenticate(txtuser.Text, txtpwd.Text))
{
FormsAuthentication.RedirectFromLoginPage(txtuser.Text, chkrem.Checked);
}
else
{
Response.Write("Invalid user name or password");
}
}
توجه داشته باشید که کلاس FormsAuthentication مسئول فرآیند احراز هویت است.
با این حال، ویژوال استودیو به شما این امکان را میدهد تا از طریق ابزار مدیریت وبسایت، ایجاد کاربر، احراز هویت و مجوز را با سهولت بدون نوشتن هیچ کدی پیادهسازی کنید. این ابزار اجازه می دهد تا کاربران و نقش ها را ایجاد کنید.
جدای از این، ASP.NET با مجموعه کنترل های ورود به سیستم آماده ارائه می شود که دارای کنترل هایی است که همه کارها را برای شما انجام می دهد.
پیاده سازی امنیت مبتنی بر فرم
برای تنظیم احراز هویت مبتنی بر فرم ها، به موارد زیر نیاز دارید:
پایگاه داده ای از کاربران برای پشتیبانی از فرآیند احراز هویت
وب سایتی که از پایگاه داده استفاده می کند
حساب های کاربری
نقش ها
محدودیت کاربران و فعالیت های گروهی
یک صفحه پیش فرض برای نمایش وضعیت ورود کاربران و سایر اطلاعات.
یک صفحه ورود، که به کاربران اجازه می دهد وارد شوند، رمز عبور را بازیابی کنند یا رمز عبور را تغییر دهند
برای ایجاد کاربران، مراحل زیر را انجام دهید:
مرحله (1): Website -> ASP.NET Configuration را برای باز کردن Web Application Administration Tool انتخاب کنید.
مرحله (2): روی تب Security کلیک کنید.
مرحله (3) : با انتخاب دکمه رادیویی «از اینترنت» نوع احراز هویت را برای «تأیید هویت مبتنی بر فرمها» انتخاب کنید.
مرحله (4): برای ایجاد چند کاربر، روی پیوند "ایجاد کاربران" کلیک کنید. اگر قبلاً نقشهایی ایجاد کردهاید، میتوانید نقشهایی را درست در این مرحله به کاربر اختصاص دهید.
مرحله (5): یک وب سایت ایجاد کنید و صفحات زیر را اضافه کنید:
Welcome.aspx
Login.aspx
CreateAccount.aspx
PasswordRecovery.aspx
ChangePassword.aspx
مرحله (6): یک کنترل LoginStatus را در Welcome.aspx از بخش ورود به جعبه ابزار قرار دهید. دارای دو قالب است: LoggedIn و LoggedOut.
در قالب LoggedOut لینک ورود و در قالب LoggedIn لینک خروج روی کنترل وجود دارد. می توانید ویژگی های متن ورود و خروج کنترل را از پنجره Properties تغییر دهید.
مرحله (7): یک کنترل LoginView را از جعبه ابزار زیر کنترل LoginStatus قرار دهید. در اینجا می توانید متون و سایر کنترل ها (هایپرلینک ها، دکمه ها و غیره) را قرار دهید که بر اساس ورود یا عدم ورود کاربر نمایش داده می شوند.
این کنترل دارای دو قالب نمایش است: قالب ناشناس و قالب LoggedIn. هر نما را انتخاب کنید و متنی برای کاربران بنویسید تا برای هر الگو نمایش داده شود. متن باید در قسمتی که قرمز رنگ است قرار گیرد.
مرحله (8): کاربران برنامه توسط توسعه دهنده ایجاد می شوند. ممکن است بخواهید به یک بازدیدکننده اجازه دهید یک حساب کاربری ایجاد کند. برای این کار، یک پیوند زیر کنترل LoginView اضافه کنید، که باید به صفحه CreateAccount.aspx پیوند داشته باشد.
مرحله (9): یک کنترل CreateUserWizard را در صفحه ایجاد حساب قرار دهید. ویژگی ContinueDestinationPageUrl این کنترل را روی Welcome.aspx قرار دهید.
مرحله (10): صفحه ورود را ایجاد کنید. یک کنترل ورود در صفحه قرار دهید. کنترل LoginStatus به طور خودکار به Login.aspx پیوند می یابد. برای تغییر این پیش فرض، تغییرات زیر را در فایل web.config انجام دهید.
به عنوان مثال، اگر می خواهید صفحه ورود خود را به عنوان signup.aspx نامگذاری کنید، خطوط زیر را به بخش <authentication> web.config اضافه کنید:
<configuration>
<system.web>
<authentication mode="Forms">
<forms loginUrl ="signup.aspx" defaultUrl = “Welcome.aspx†/>
</authentication>
</system.web>
</configuration>
مرحله (11): کاربران اغلب رمزهای عبور را فراموش می کنند. کنترل PasswordRecovery به کاربر کمک می کند تا به حساب کاربری دسترسی پیدا کند. کنترل ورود را انتخاب کنید. تگ هوشمند آن را باز کنید و روی «تبدیل به الگو» کلیک کنید.
رابط کاربری کنترل را سفارشی کنید تا یک کنترل هایپرلینک زیر دکمه ورود قرار دهید، که باید به PassWordRecovery.aspx پیوند داشته باشد.
مرحله (12): یک کنترل بازیابی رمز عبور را در صفحه بازیابی رمز عبور قرار دهید. این کنترل به یک سرور ایمیل برای ارسال رمزهای عبور به کاربران نیاز دارد.
مرحله (13): پیوندی به صفحه ChangePassword.aspx در قالب LoggedIn کنترل LoginView در Welcome.aspx ایجاد کنید.
مرحله (14): یک کنترل ChangePassword را در صفحه تغییر رمز عبور قرار دهید. این کنترل نیز دارای دو نمای است.
اکنون برنامه را اجرا کنید و عملیات امنیتی مختلف را مشاهده کنید.
برای ایجاد نقش ها، به Web Application Administration Tools برگردید و روی تب Security کلیک کنید. روی "ایجاد نقش" کلیک کنید و چند نقش برای برنامه ایجاد کنید.
روی پیوند "مدیریت کاربران" کلیک کنید و نقش هایی را به کاربران اختصاص دهید.
احراز هویت IIS: SSL
لایه سوکت امن یا SSL پروتکلی است که برای اطمینان از اتصال ایمن استفاده می شود. با فعال بودن SSL، مرورگر تمام داده های ارسال شده به سرور را رمزگذاری می کند و تمام داده های دریافتی از سرور را رمزگشایی می کند. در همان زمان، سرور تمام داده ها را به و از مرورگر رمزگذاری و رمزگشایی می کند.
URL برای اتصال ایمن با HTTPS به جای HTTP شروع می شود. یک قفل کوچک توسط یک مرورگر با استفاده از یک اتصال ایمن نمایش داده می شود. هنگامی که یک مرورگر تلاش اولیه برای برقراری ارتباط با یک سرور از طریق یک اتصال امن با استفاده از SSL را انجام می دهد، سرور با ارسال گواهی دیجیتال خود را احراز هویت می کند.
برای استفاده از SSL، باید یک گواهی امن دیجیتالی از یک مرجع معتبر صدور گواهینامه (CA) خریداری کنید و آن را در وب سرور نصب کنید. در زیر برخی از مقامات معتبر و معتبر صدور گواهینامه آورده شده است:
www.verisign.com
www.geotrust.com
www.thawte.com
SSL در تمام مرورگرها و سرورهای اصلی تعبیه شده است. برای فعال کردن SSL، باید گواهی دیجیتال را نصب کنید. قدرت گواهی های دیجیتال مختلف بسته به طول کلید تولید شده در طول رمزگذاری متفاوت است. طول بیشتر، گواهی امن تر است، بنابراین اتصال.
شرح قدرت
40 بیت توسط اکثر مرورگرها پشتیبانی می شود اما به راحتی قابل شکستن است.
56 بیت قوی تر از 40 بیت.
128 بیت شکستن بسیار سخت است اما همه مرورگرها از آن پشتیبانی نمی کنند.
ASP.NET - ذخیره داده ها
Caching چیست؟
کش کردن یک تکنیک ذخیره سازی داده ها/اطلاعات پرکاربرد در حافظه است، به طوری که، زمانی که دفعه بعد به همان داده/اطلاعات نیاز است، به جای تولید توسط برنامه، بتوان مستقیماً از حافظه بازیابی شود.
حافظه پنهان برای افزایش عملکرد در ASP.NET بسیار مهم است، زیرا صفحات و کنترل ها به صورت پویا در اینجا تولید می شوند. این امر به ویژه برای تراکنش های مرتبط با داده مهم است، زیرا از نظر زمان پاسخ گران هستند.
ذخیرهسازی مکانهایی که دادههای پرکاربرد را در رسانههایی با دسترسی سریع مانند حافظه دسترسی تصادفی رایانه انجام میدهند. زمان اجرا ASP.NET شامل یک نقشه کلید-مقدار از اشیاء CLR به نام کش است. این مربوط به برنامه است و از طریق HttpContext و System.Web.UI.Page در دسترس است.
از برخی جهات، کش کردن شبیه به ذخیره اشیاء حالت است. با این حال، ذخیره اطلاعات در اشیاء حالت قطعی است، یعنی میتوانید روی دادههایی که در آنجا ذخیره میشوند حساب کنید، و ذخیره دادهها غیر قطعی است.
داده ها در موارد زیر در دسترس نخواهد بود:
اگر عمر آن به پایان برسد،
اگر برنامه حافظه خود را آزاد کند،
اگر کش به دلایلی انجام نشود.
شما می توانید با استفاده از یک نمایه ساز به موارد موجود در حافظه پنهان دسترسی داشته باشید و ممکن است طول عمر اشیاء موجود در حافظه پنهان را کنترل کنید و پیوندهایی بین اشیاء کش و منابع فیزیکی آنها تنظیم کنید.
ذخیره سازی در ASP.Net
ASP.NET انواع مختلف کش زیر را ارائه می دهد:
حافظه پنهان خروجی: حافظه پنهان خروجی یک کپی از صفحات HTML نهایی ارائه شده یا بخشی از صفحات ارسال شده به مشتری را ذخیره می کند. هنگامی که مشتری بعدی برای این صفحه درخواست می کند، به جای ایجاد مجدد صفحه، یک نسخه کش شده از صفحه ارسال می شود و در نتیجه در زمان صرفه جویی می شود.
حافظه پنهان داده: ذخیره داده به معنای ذخیره داده ها از یک منبع داده است. تا زمانی که کش منقضی نشده باشد، درخواست داده از کش انجام می شود. هنگامی که حافظه نهان منقضی می شود، داده های تازه توسط منبع داده به دست می آید و کش دوباره پر می شود.
Object Caching: کش کردن اشیاء در حافظه پنهان اشیاء موجود در یک صفحه، مانند کنترلهای محدود به داده، ذخیره میشود. داده های کش شده در حافظه سرور ذخیره می شود.
ذخیره کلاس: صفحات وب یا سرویس های وب در یک کلاس صفحه در اسمبلی، زمانی که برای اولین بار اجرا می شوند، کامپایل می شوند. سپس اسمبلی در سرور ذخیره می شود. دفعه بعد که درخواستی برای صفحه یا سرویس ارائه می شود، اسمبلی کش ارجاع داده می شود. هنگامی که کد منبع تغییر می کند، CLR اسمبلی را دوباره کامپایل می کند.
ذخیره سازی پیکربندی: اطلاعات پیکربندی گسترده برنامه در یک فایل پیکربندی ذخیره می شود. کش پیکربندی اطلاعات پیکربندی را در حافظه سرور ذخیره می کند.
در این آموزش، کش خروجی، کش داده ها و کش کردن اشیا را در نظر خواهیم گرفت.
ذخیره خروجی
ارائه یک صفحه ممکن است شامل برخی از فرآیندهای پیچیده مانند دسترسی به پایگاه داده، رندر کردن کنترل های پیچیده و غیره باشد. کش خروجی امکان دور زدن رفت و آمدهای رفت و برگشت به سرور با ذخیره داده ها در حافظه را فراهم می کند. حتی کل صفحه را می توان کش کرد.
دستور OutputCache وظیفه ذخیره سازی خروجی را بر عهده دارد. ذخیره خروجی را فعال می کند و کنترل خاصی بر رفتار آن فراهم می کند.
دستور دستور OutputCache:
<%@ OutputCache Duration="15" VaryByParam="None" %>
این دایرکتیو را زیر صفحه دایرکتیو قرار دهید. این به محیط می گوید که صفحه را به مدت 15 ثانیه کش کند. کنترل کننده رویداد زیر برای بارگذاری صفحه به آزمایش اینکه صفحه واقعاً کش است کمک می کند.
protected void Page_Load(object sender, EventArgs e)
{
Thread.Sleep(10000);
Response.Write("This page was generated and cache at:" +
DateTime.Now.ToString());
}
متد ()Thread.Sleep رشته فرآیند را برای مدت زمان مشخص متوقف می کند. در این مثال، موضوع به مدت 10 ثانیه متوقف می شود، بنابراین وقتی صفحه برای اولین بار بارگذاری می شود، 10 ثانیه طول می کشد. با این حال، دفعه بعد که صفحه را بهروزرسانی میکنید، زمان نمیبرد، زیرا صفحه بدون بارگیری از حافظه پنهان بازیابی میشود.
دستور OutputCache دارای ویژگی های زیر است که به کنترل رفتار حافظه پنهان خروجی کمک می کند:
توصیف مقادیر ویژگی
DiskCacheable true/false مشخص می کند که خروجی می تواند در حافظه پنهان مبتنی بر دیسک نوشته شود.
NoStore true/false مشخص می کند که سربرگ کنترل کش "no store" ارسال شود یا خیر.
CacheProfile نام رشته نام نمایه کش که در web.config ذخیره می شود.
VaryByParam
هیچ یک
*
لیست رشته محدود شده با نقطه ویرگول نام پارامتر، مقادیر رشته پرس و جو را در یک درخواست GET یا متغیر در یک درخواست POST مشخص می کند.
VaryByHeader
*
نام سرصفحه ها
لیست رشته ها با نقطه ویرگول مشخص می کند که ممکن است توسط مشتری ارسال شود.
VaryByCustom
مرورگر
رشته سفارشی
به ASP.NET میگوید حافظه پنهان خروجی را بر اساس نام مرورگر و نسخه یا یک رشته سفارشی تغییر دهد.
محل
هر
مشتری
پایین دست
سرور
هیچ یک
هر: صفحه ممکن است در هر جایی ذخیره شود.
مشتری: محتوای کش در مرورگر باقی می ماند.
Downstream: محتوای کش ذخیره شده در پایین دست و سرور هر دو.
سرور: محتوای کش که فقط در سرور ذخیره می شود.
هیچ: ذخیره کش را غیرفعال می کند.
تعداد مدت زمان تعداد ثانیه هایی که صفحه یا کنترل در حافظه پنهان ذخیره می شود.
اجازه دهید یک جعبه متن و یک دکمه را به مثال قبلی اضافه کنیم و این کنترل کننده رویداد را برای دکمه اضافه کنیم.
protected void btnmagic_Click(object sender, EventArgs e)
{
Response.Write("<br><br>");
Response.Write("<h2> Hello, " + this.txtname.Text + "</h2>");
}
دستور OutputCache را تغییر دهید:
<%@ OutputCache Duration="60" VaryByParam="txtname" %>
هنگامی که برنامه اجرا می شود، ASP.NET صفحه را بر اساس نام موجود در کادر متن ذخیره می کند.
ذخیره داده ها
جنبه اصلی ذخیرهسازی داده، ذخیره کردن کنترلهای منبع داده است. قبلاً بحث کردهایم که کنترلهای منبع داده، دادهها را در یک منبع داده مانند یک پایگاه داده یا یک فایل XML نشان میدهند. این کنترلها از کلاس انتزاعی DataSourceControl مشتق شدهاند و دارای ویژگیهای ارثی زیر برای پیادهسازی کش هستند:
CacheDuration - تعداد ثانیه هایی را که منبع داده داده ها را در حافظه پنهان ذخیره می کند را تعیین می کند.
CacheExpirationPolicy - رفتار کش را زمانی که داده های موجود در حافظه نهان منقضی شده است تعریف می کند.
CacheKeyDependency - کلیدی را برای کنترلها مشخص میکند که پس از حذف، محتوای حافظه پنهان خود را بهطور خودکار منقضی میکند.
EnableCaching - مشخص می کند که داده ها کش شوند یا نه.
مثال
برای نمایش کش داده ها، یک وب سایت جدید ایجاد کنید و یک فرم وب جدید روی آن اضافه کنید. یک کنترل SqlDataSource با اتصال پایگاه داده که قبلاً در آموزش های دسترسی به داده استفاده شده است اضافه کنید.
برای این مثال، یک برچسب به صفحه اضافه کنید که زمان پاسخگویی صفحه را نشان می دهد.
<asp:Label ID="lbltime" runat="server"></asp:Label>
به غیر از برچسب، صفحه محتوا مانند آموزش دسترسی به داده است. یک کنترل کننده رویداد برای رویداد بارگذاری صفحه اضافه کنید:
protected void Page_Load(object sender, EventArgs e)
{
lbltime.Text = String.Format("Page posted at: {0}", DateTime.Now.ToLongTimeString());
}
صفحه طراحی شده باید به شکل زیر باشد:
هنگامی که صفحه را برای اولین بار اجرا می کنید، هیچ اتفاق متفاوتی نمی افتد، برچسب نشان می دهد که هر بار که صفحه را به روز می کنید، صفحه مجددا بارگذاری می شود و زمان نشان داده شده روی برچسب تغییر می کند.
در مرحله بعد، ویژگی EnableCaching کنترل منبع داده را روی "true" تنظیم کنید و ویژگی Cacheduration را روی "60" تنظیم کنید. کش را اجرا می کند و کش هر 60 ثانیه منقضی می شود.
مهر زمانی با هر بار تازه سازی تغییر می کند، اما اگر داده های جدول را در این 60 ثانیه تغییر دهید، قبل از منقضی شدن حافظه پنهان نشان داده نمی شود.
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:
ASPDotNetStepByStepConnectionString %>"
ProviderName="<%$ ConnectionStrings:
ASPDotNetStepByStepConnectionString.ProviderName %>"
SelectCommand="SELECT * FROM [DotNetReferences]"
EnableCaching="true" CacheDuration = "60">
</asp:SqlDataSource>
ذخیره شی
کش اشیاء انعطاف پذیری بیشتری نسبت به سایر تکنیک های کش فراهم می کند. شما می توانید از کش کردن شی برای قرار دادن هر شی در حافظه پنهان استفاده کنید. شی می تواند از هر نوع باشد - یک نوع داده، یک کنترل وب، یک کلاس، یک شی مجموعه داده و غیره. آیتم به سادگی با اختصاص یک نام کلید جدید به حافظه پنهان اضافه می شود، که به صورت زیر نشان داده شده است:
Cache["key"] = item;
ASP.NET همچنین متد Insert() را برای درج یک شی در حافظه پنهان فراهم می کند. این روش دارای چهار نسخه اضافه بار است. بگذارید آنها را ببینیم:
توضیحات اضافه بار
Cache.Insert((key, value)؛ آیتمی را با نام و مقدار کلید با اولویت و انقضای پیش فرض در حافظه پنهان درج می کند.
Cache.Insert (کلید، مقدار، وابستگی ها)؛ یک مورد را با کلید، مقدار، اولویت پیشفرض، انقضا و نام CacheDependency که به فایلها یا آیتمهای دیگر پیوند میدهد، در حافظه پنهان وارد میکند تا زمانی که این موارد تغییر میکنند، مورد حافظه پنهان دیگر معتبر باقی نمیماند.
Cache.Insert(کلید، مقدار، وابستگی ها، absoluteExpiration، slidingExpiration)؛ این نشان دهنده یک خط مشی انقضا همراه با موارد فوق است.
Cache.Insert(کلید، مقدار، وابستگی ها، absoluteExpiration، slidingExpiration، priority، onRemoveCallback)؛ این به همراه پارامترها همچنین به شما امکان می دهد یک اولویت برای آیتم حافظه پنهان و یک نماینده تعیین کنید که به روشی اشاره می کند که باید هنگام حذف آیتم فراخوانی شود.
انقضای لغزشی برای حذف یک مورد از حافظه پنهان زمانی که برای بازه زمانی مشخص استفاده نمی شود استفاده می شود. قطعه کد زیر یک مورد را با انقضای کشویی 10 دقیقه بدون وابستگی ذخیره می کند.
Cache.Insert("my_item", obj, null, DateTime.MaxValue, TimeSpan.FromMinutes(10));
مثال
یک صفحه فقط با یک دکمه و یک برچسب ایجاد کنید. کد زیر را در رویداد بارگذاری صفحه بنویسید:
protected void Page_Load(object sender, EventArgs e)
{
if (this.IsPostBack)
{
lblinfo.Text += "Page Posted Back.<br/>";
}
else
{
lblinfo.Text += "page Created.<br/>";
}
if (Cache["testitem"] == null)
{
lblinfo.Text += "Creating test item.<br/>";
DateTime testItem = DateTime.Now;
lblinfo.Text += "Storing test item in cache ";
lblinfo.Text += "for 30 seconds.<br/>";
Cache.Insert("testitem", testItem, null,
DateTime.Now.AddSeconds(30), TimeSpan.Zero);
}
else
{
lblinfo.Text += "Retrieving test item.<br/>";
DateTime testItem = (DateTime)Cache["testitem"];
lblinfo.Text += "Test item is: " + testItem.ToString();
lblinfo.Text += "<br/>";
}
lblinfo.Text += "<br/>";
}
هنگامی که صفحه برای اولین بار بارگذاری می شود، می گوید:
Page Created.
Creating test item.
Storing test item in cache for 30 seconds.
اگر در عرض 30 ثانیه دوباره روی دکمه کلیک کنید، صفحه به عقب ارسال میشود اما کنترل برچسب اطلاعات خود را از حافظه پنهان مطابق شکل دریافت میکند:
Page Posted Back.
Retrieving test item.
Test item is: 14-07-2010 01:25:04