• X-Frame-Option

به صورت پیشفرض امکان نمایش سایت شما در داخل iframe وجود دارد. اما با استفاده از هدر X-Frame-Option میتوان جلوی این کار را گرفت. اما چرا؟ زیرا هرکس میتواند وب سایت شما را داخل یک iframe نمایش دهد و یک لایه ی شفاف ( transparent ) بر روی آن بیندازد و کاربران فکر میکنند که بر روی وب سایت شما کلیک میکنند ( بر روی یک دکمه یا لینک ), اما در واقعیت آنها بر روی المنت های قرار داده شده بر روی لایه ی شفاف ( transparent ) کلیک میکنند. و امکان دارد کوکی کاربر در مرورگر تنظیم شده باشد و در این حالت امکان اجرای برخی عملیات وجود دارد چون کاربر احراز هویت شده است ( Authenticated ). این نوع حمله Clickjacking نام دارد. و با استفاده از کد زیر میتوان از این حملات جلوگیری کرد.

app.Use(async (context, next) =>
{
    if (!context.Response.Headers.Any(a => a.Key == "X-Frame-Option"))
        context.Response.Headers.Add("X-Frame-Options", "Deny");
    await next();
});

از طریق وب کانفیگ هم میتوان این تنظیمات را فعال کرد

  <system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="X-Frame-Options" value="DENY" />
      </customHeaders>
    </httpProtocol>
  </system.webServer>
  • Server Version

بعضی از هدرها اطلاعاتی را منتشر می کنند که بهتر است آنها را مخفی کنیم. مانند Server-Version. این هدر نوع سرور را مشخص میکند. مانند Microsoft-IIS/Express, nginx, Apache و ... .برای جلوگیری از نمایش این هدر در برنامه های Asp.net میتوان از طریق وب کانفیگ این کار را انجام داد.

<configuration> 
  <system.webServer>
    <security>
      <requestFiltering removeServerHeader="true" />
    </security>
    <httpProtocol>
      <customHeaders>
        <remove name="X-Powered-By" />
      </customHeaders>
    </httpProtocol>
  </system.webServer>
</configuration>

و یا در asp.net core کلاس Program نمایش Server Header را غیرفعال کنیم.

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .UseKestrel(options =>
        {
            options.AddServerHeader = false;
        })
        .UseStartup<Startup>();
  • X-Xss-Protection

X-Xss-Protection یک ویژگی جدید است که در مرورگرهای جدید پشتیبانی میشود. این هدر زمانی که تشخیص بدهد که حمله cross-site scripting رخ داده است, بارگزاری صفحه را ( loading ) را متوقف میکند. با استفاده از تنظیمات زیر میتوان این ویژگی را فعال کرد

<system.webServer>
  <httpProtocol>
    <customHeaders>
      <add name="X-Xss-Protection" value="1; mode=block" />
    </customHeaders>
  </httpProtocol>
</system.webServer>
  • Strict-Transport-Security

اگر وب سایت شما از https استفاده نمیکند, باید هرچه زودتر https را فعال کنید. پس از فعال کردن https شما میتواند با استفاده از این هدر فقط درخواست هایی که بر روی https ارسال میشوند را پاسخ دهید. دیگر هیچ درخواستی با http پاسخ داده نمیشود.

<system.webServer>
  <httpProtocol>
    <customHeaders>
      <add name="Strict-Transport-Security" value="max-age=31536000; includeSubDomains" />
    </customHeaders>
  </httpProtocol>
</system.webServer>
  • X-Content-Type-Options

این هدر برای محافظت در برابر آسیب پذیری MIME sniffing می باشد. این آسیب پذیری زمانی ممکن است رخ بدهد که کاربران در وبسایت شما امکان آپلود فایل را داشته باشند و کاربر نوع فایل را به یک تایپ دیگر تغییر میدهد. این کار میتواند فرصتی باشد برای حملات cross-site scripting و به خطر انداختن وب سایت شما. 

با این حال, این هدر امنیتی با غیر فعال کردن MIME sniffing به جلوگیری از این حملات کمک میکند. با این کار مرورگر موظف است که از نوع MIME ارسال شده از طریق سرور استفاده کند.

یک مثال در این مورد:

  1. کلاینت یک درخواست برای سرور ارسال میکند برای یک فایل به نام image.jpg
  2. سرور یک پاسخ به کلاینت ارسال میکند با هدر X-Content-Type-Options: nosniff. این کار باعث میشود که کلاینت از آزمایش و تعیین این که نوع فایل چیزی غیر از آن است که از طرف سرور مشخص شده است, جلوگیری کند.
  3. سپس مرورگر MIME تعریف شده از طرف سرور را قبول میکند و آنرا به کاربر نمایش میدهد.
  <system.webServer>
      <httpProtocol>
         <customHeaders>
            <add name="X-Content-Type-Options" value="nosniff" />
         </customHeaders>
      </httpProtocol>
   </system.webServer>
  • Content-Security-Policy

CSP یک هدر امنیتی برای جلوگیری از حملات Cross-Site Scripting یا XSS است. در این حملات یک اسکریپت مخرب در مرورگر کاربر اجرا میشود زیرا مروگر نمیداند منبع اسکریپت قابل اطمینان است یا نه. CSP به توسعه دهندگان این امکان را میدهد که منابع قابل اطمینان را معرفی کنند. این لیست سفید منابع با استفاده از هدر Content-Security-Type قابل استفاده است. به عنوان مثال با استفاده از این هدر میتوانید مشخص کنید که عکس هایی که منبع آنها وب سایت شماست قابل نمایش باشند, هیچ css و js از نوع inline اجرا نشود فقط css و js هایی که به صورت link به صفحه ارجاع داده شده اند اجرا شوند, فونت ها از منابع به خصوصی خوانده شوند و ... . میتوانید این قابلیت هارا مانند سایر هدرها پیاده سازی کنید. در وب کانفیگ یا در سورس کد برنامه. وب کانفیگ :

<system.webServer>
    <httpProtocol>
        <customHeaders>
            <add name="Content-Security-Policy" value="script-src 'self'; img-src 'self'; style-src 'self'" />
        </customHeaders>
    </httpProtocol>
</system.webServer>

سورس کد:

app.Use(async (context, next) =>
{
    context.Response.Headers.Add(
        "Content-Security-Policy",
        "script-src 'self'; " +
        "style-src 'self'; " +
        "img-src 'self'");

    await next();
});

در کد بالا مشخص شده که عکس ها, css و js هایی معتبر هستند که به عنوان لینک به صفحه ارجاع داده شده باشند و دیگر هیچ css و js به صورت inline اجرا نمیشود.

برای راحتی انجام این تنظیمات میتوانید از پکیج NWebsec استفاده کنید.

نحوه استفاده از پکیج :

app.UseCsp(options =>
{
    options.BlockAllMixedContent()
    .ScriptSources(s => s.Self())
    .StyleSources(s => s.Self())
    .StyleSources(s => s.UnsafeInline())
    .FontSources(s => s.Self())
    .FormActions(s => s.Self())
    .FrameAncestors(s => s.Self())
    .ImageSources(s => s.Self());
});
app.UseXfo(option =>
{
    option.Deny();
});
app.UseXXssProtection(option =>
{
    option.EnabledWithBlockMode();
});
app.UseXContentTypeOptions();
app.UseReferrerPolicy(opts => opts.NoReferrer());

 کد های این مقاله را میتوانید از گیت هاب دانلود کنید ;)

Powered by Froala Editor