امنیت NWebsec از طریق HTTP Header

جمعه 8 آبان 1394

در این مقاله توضیحاتی درباره روش امنیتی NWebSec و چگونگی به کار بردن آن در سایتهایی که با استفاده از ASP.Net MVC ساخته می شوند ارائه خواهیم داد . NWebSec یک راه خوب برای امنیت بیشتر سایت شما است.

امنیت NWebsec از طریق HTTP Header

  در این مقاله توضیحاتی درباره روش امنیتی NWebSec و چگونگی به کار بردن آن در سایتهایی که با استفاده از ASP.Net MVC ساخته می شوند ارائه خواهیم داد . NWebSec یک راه خوب برای امنیت بیشتر سایت شما است. قالب پروژه ASP.Net MVC Boilerplate آن را به صورت پیش فرض دارد که همه چیز در آن از پیش تعیین شده است ، اما به یاد داشته باشید که تنها یک قالب است و لازم است که امنیت را بر اساس نیازهای خود سفارشی کنید و هر زمان که امکانات جدید امنیتی و راه استفاده از آن را آموختید در قالب امنیتی خود قرار دهید.  

HTTP Headers

HTTP  زمان زیادی استفاده شده است و تعداد زیادی HTTP Header  در این زمان طولانی انباشته شده است. بعضی ها نسبت به بقیه بیشتر استفاده می شوند و بعضی امنیت بیشتری برای سایت ما ایجاد میکنند. NWebSec یک دامنه از ActionFilterAttribute ها فراهم کرده است که از طریق سه راه می توان آنها را بکاربرد:

1. اعمال سراسری ، که به همه درخواست ها و پاسخ های HTTP اعمال می شود.

2. اعمال در کنترلرهای منحصر بفرد

3. اعمال در اقدامات کنترلر(controller actions) منحصر بفرد

ActionFilterAttribute ها به این صورت اضافه می شوند و HTTP header  های خاص را تنظیم میکنند. بسیاری از آنها در ASP.Net MVC Boilerplate به صورت سراسری از پیش تعیین شده اند.

X-Frame-Options

X-Frame-Option HTTP header ، کلیک سرقت Click-hacking را بوسیله متوقف کردن صفحه از باز شدن در iframe یا اجازه دادن به صفحه برای باز شدن در دامنه ، متوقف میکند. سه گزینه برای انتخاب وجود دارد:

     . Deny - مشخص میکند که X-Frame-Option header باید در پاسخ HTTP تنظیم شود و مرورگر هنگامی صفحه را نمایش دهد که در یک iframe بارگذاری شده باشد اما زمانی که iframe  از همان دامنه باشد. 

     . SameOrigin- مشخص میکند که X-frame-Option header باید در پاسخ HTTP  تنظیم شود و مروگر هنگامی که صفحه در iframe  بارگذاری شد، آن را نمایش ندهد.

     .Disabled-  مشخص میکند که X-frame-Option header نباید در پاسخ HTTP تنظیم شود.

می توانیم از NWebSec برای مسدود کردن همه iframe ها در زمان بارگذاری سایت استفاده کنیم که این روش بیشترین گزینه های امنیتی را دارد و به صورت پیش فرض بر روی ASP.Net MVC Boilerplate  قرار دارد.

	
// Filters is the GlobalFilterCollection from GlobalFilters.Filters
filters.Add(
    new XFrameOptionsAttribute()
    {
        Policy = XFrameOptionsPolicy.Deny
    });

توجه داشته باشید که برای مرورگرهای جدید این HTTP header  به جایگزین Content Security Policy HTTP header  تبدیل شده است.

Strict-Transport-Security

 این HTTP header تنها در صورتی که ار   TLSاستفاده میکنید مناسب است. تضمین میکند که محتوا بر روی HTTPS بارگذاری می شود و خطاهای گواهی یا Certificate errors  و هشدارها را رد میکند. یک راهنمای کامل برای تنظیم سایت شما برای راه اندازی با یک گواهی TSL در اینجا قرار دارد.

NWebSec در حال حاضر از فیلتر MVC که به صورت سراسری اعمال می شود پشتیبانی نمیکند. در عوض می توانیم از Owin برای بکار بردن آن استفاده کنیم . برای اعمال Owin ، از NWebSec.Owin Nuget pakage  استفاده کنید.

app.UseHsts(options => options.MaxAge(days:30).IncludeSubdomains());

علاوه بر این MVC  از  RequireHttpsAttribute  استفاده میکند که درخواست های HTTP ناامن را دوباره روی HTTPS ارسال میکند. این کار را بدون نیاز به هیچ HTTP header اضافه ای انجام می دهد. این یک تابع از MVC است که درخواست ها را چک میکند و کاربر را اگر درخواست HTTP به یک آدرس HTTPS فرستاده باشد به سادگی راهنمایی میکند.

همانطور که در پایین نشان داده شده است این صفت می تواند به صورت سراسری تنظیم شود.

filters.Add(new RequireHttpsAttribute());

هر دوی این کدها یک هدف مشترک دارند اما به دو صورت جداگانه کار میکنند. صفت  RequireHttpsAttribute از چارچوب MVC استفاده میکند در حالیکه NWebSec متکی به پاسخ های مرورگر است .امنیت باید در لایه های ضخیم اعمال شود پس استفاده از هر دوی روش ها با ارزشتر است. از نظر ASP.Net MVC Boilerplate  شما بطور پیش فرض از TSL  استفاده نمیکنید اما شامل کد های بالا می شود. 

X-Content-Type-Options

این هدر IE9  را متوقف میکند. این فیلتر به صورت پیش فرض بر روی ASP.Net MVC Boilerplate  قرار دارد.

	
filters.Add(new XContentTypeOptionsAttribute());

X-Download-Options

این header دانلود خودکار و باز شده صفحه های HTML بوسیله مرورگر را متوقف میکند. و به کاربر اجازه می دهد تا صفحه را ذخیره کند و به صورت دستی سند HTML  را باز کند. این فیلتر به صورت پیش فرض در Boilerplate  قرار دارد.

	
filters.Add(new XDownloadOptionsAttribute());

HTTP Header  های دیگر

NWebSec  تعدادی از HTTP header های مفید را فراهم کرده است.

SetNoCacheHttpHeadersAttribute  کمک میکند تا Caching با استفاده از اعمال CacheControl  ،  Expires  و Pragma HTTP header  خاموش شود. 

فیلتر مفید دیگر XRobotsTagAttribute است. که بوسله آن X-Robots-Tag HTTP header  اضافه می شود که به ربات ها مانندGoogle  و Bing می گوید که هیچ Action  یا کنترلری که از این صفت استفاده میکند را ایندکس نکنند. توجه داشته باشید که ASP.Net MVC Boilerplate  شامل یک  robots.txt  می شود که باید از آن بجای این فیلتر استفاده کنید. فیلتر XRobotsTagAttribute برای تکمیل شدن توضیحات آورده شده است.

جای خوبی که می توان از این صفت استفاده کرد صفحه ای است که در آن اطلاعات کارت بانکی ارسال می شود . زیرا Cache  شدن اطلاعات کارت بانکی می تواند ریسک امنیتی بزرگی باشد و حتما نمیخواهید توسط موتورهای جستجو واررسی شوند.

public class CheckoutController : Controller
{
    [SetNoCacheHttpHeadersAttribute, XRobotsTagAttribute(NoIndex = true, NoFollow = true)]
    public ActionResult Checkout(CardDetails cardDetails)
    {
        // Checkout customers purchases securely.
    }
}
 
در زیر تصویری از ASP.NetMVC Boilerplate  را مشاهده میکنید.
 

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید