۳۰ شهریور ۱۴۰۳

Techboy

اخبار و اطلاعات روز تکنولوژی

نحوه پیاده سازی لیست سفید IP در ASP.NET Core 6

از میان افزار در ASP.NET Core 6 برای بررسی آدرس IP راه دور هر درخواست استفاده کنید و درخواست ها را فقط از آدرس های شناخته شده و قابل اعتماد مجاز کنید.

از میان افزار در ASP.NET Core 6 برای بررسی آدرس IP راه دور هر درخواست استفاده کنید و درخواست ها را فقط از آدرس های شناخته شده و قابل اعتماد مجاز کنید.

هنگام کار با برنامه‌های کاربردی در ASP.NET Core 6، اغلب می‌خواهید یک لیست سفید آدرس IP ایجاد کنید تا درخواست‌های مشتری فقط از آدرس‌های IP خاصی مجاز باشد، در حالی که درخواست‌های همه آدرس‌های دیگر را مسدود کنید. ما این کار را برای محافظت از نقاط پایانی API خود در برابر درخواست‌های بالقوه مخرب بازیگران بد انجام می‌دهیم و در عین حال به درخواست‌هایی که از آدرس‌های IP قابل اعتماد سرچشمه می‌گیرند اجازه می‌دهیم.

لیست سفید IP که فهرست امن IP نیز نامیده می‌شود، کمک می‌کند اطمینان حاصل شود که داده‌های حساس برنامه ما فقط در معرض آدرس‌های IP هستند که می‌دانیم و به آنها اعتماد داریم. لیست سفید IP را می توان در ASP.NET Core با استفاده از میان افزار یا با استفاده از فیلترهای عمل MVC پیاده سازی کرد. این مقاله نشان می‌دهد که چگونه می‌توانیم فهرست سفید IP را در ASP.NET Core 6 با استفاده از میان‌افزار پیاده‌سازی کنیم.

برای کار با نمونه کدهای ارائه شده در این مقاله، باید Visual Studio 2022 را در سیستم خود نصب کنید. اگر قبلاً نسخه‌ای ندارید، می‌توانید Visual Studio 2022 را از اینجا بارگیری کنید.

یک پروژه ASP.NET Core Web API در Visual Studio 2022 ایجاد کنید

ابتدا، اجازه دهید یک پروژه ASP.NET Core در Visual Studio 2022 ایجاد کنیم. با دنبال کردن این مراحل، یک پروژه ASP.NET Core Web API در Visual Studio 2022 ایجاد می شود:

  1. Visual Studio 2022 IDE را راه اندازی کنید.
  2. روی “ایجاد پروژه جدید” کلیک کنید.
  3. در پنجره “ایجاد پروژه جدید”، “ASP.NET Core Web API” را از لیست الگوهای نمایش داده شده انتخاب کنید.
  4. بعدی را کلیک کنید.
  5. در پنجره “پیکربندی پروژه جدید خود”، نام و مکان پروژه جدید را مشخص کنید.
  6. به صورت اختیاری، بسته به تنظیمات برگزیده خود، کادر انتخاب «قرار دادن راه حل و پروژه در یک فهرست راهنمای» را علامت بزنید.
  7. بعدی را کلیک کنید.
  8. در پنجره “اطلاعات اضافی” که در ادامه نشان داده شده است، مطمئن شوید که کادر “استفاده از کنترلرها…” علامت زده شده است. تنظیم «نوع احراز هویت» را روی «هیچ» (پیش‌فرض) بگذارید. و مطمئن شوید که چک باکس‌های «Enable Docker»، «Configure for HTTPS» و «Enable Open API Support» علامت نخورده باشند، زیرا ما از هیچ یک از این ویژگی‌ها در اینجا استفاده نخواهیم کرد.
  9. روی ایجاد کلیک کنید.
عملی با API های Dropwizard REST

ما از این پروژه ASP.NET Core 6 Web API برای کار با لیست‌های سفید IP در بخش‌های بعدی این مقاله استفاده خواهیم کرد.

کلاس برنامه در ASP.NET Core 6

برنامه و راه‌اندازی کلاس‌های اصلی برای پیکربندی برنامه‌های NET شما هستند. با این حال، ASP.NET Core 6 یک مدل برنامه نویسی و میزبانی ساده ارائه می دهد که بیشتر کدهای دیگ بخار را حذف می کند. اکنون دیگر کلاس Startup را ندارید. در عوض، باید کد خود را برای پیکربندی خط لوله پردازش درخواست در کلاس Program بنویسید.

هنگامی که یک پروژه جدید ASP.NET Core 6 در ویژوال استودیو ایجاد می کنید، کلاس Program به این صورت خواهد بود:

var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
var app = builder.Build();
// Configure the HTTP request pipeline.
app.UseAuthorization();
app.MapControllers();
app.Run();

ما از این کلاس Program در بخش‌های بعدی این مقاله استفاده خواهیم کرد. اما ابتدا بررسی خواهیم کرد که چگونه می توانیم میان افزار لیست سفید IP را در ASP.NET Core 6 پیاده سازی کنیم.

بررسی: YugabyteDB به PostgreSQL افتخار می کند

آدرس های IP لیست سفید را در فایل پیکربندی مشخص کنید

آدرس‌های IP فهرست سفید زیر را در فایل appsettings.json مشخص کنید.

"IPWhitelistOptions": {
    "Whitelist": [ "192.168.0.9", "192.168.1.9", "::1" ]
  }

توجه داشته باشید که این آدرس‌های IP فقط برای مصورسازی ارائه شده‌اند. شما باید این آدرس های IP را با آدرس های IP که می خواهید در لیست سفید قرار دهید جایگزین کنید.

اکنون یک کلاس جدید به نام IPWhitelistOptions با کد زیر ایجاد کنید، که مقادیر پیکربندی (آدرس های IP) را که ما به تازگی مشخص کردیم را می خواند.

public class IPWhitelistOptions
{
   public List<string> Whitelist { get; set; }
}

کلاس IPWhitelist Middleware را ایجاد کنید

برای ساخت میان افزار ما که آدرس های IP ما را در لیست سفید قرار می دهد، یک کلاس جدید به نام IPWhitelistMiddleware با کد زیر ایجاد کنید.

public class IPWhitelistMiddleware
    {
        private readonly RequestDelegate _next;
        private readonly IPWhitelistOptions _iPWhitelistOptions;
        private readonly ILogger<IPWhitelistMiddleware> _logger;
        public IPWhitelistMiddleware(RequestDelegate next,
        ILogger<IPWhitelistMiddleware> logger,
            IOptions<IPWhitelistOptions> applicationOptionsAccessor)
        {
            _iPWhitelistOptions = applicationOptionsAccessor.Value;
            _next = next;
            _logger = logger;
        }
        public async Task Invoke(HttpContext context)
        {
            if (context.Request.Method != HttpMethod.Get.Method)
            {
                var ipAddress = context.Connection.RemoteIpAddress;
                List<string> whiteListIPList =
                _iPWhitelistOptions.Whitelist;
                var isIPWhitelisted = whiteListIPList
                .Where(ip => IPAddress.Parse(ip)
                .Equals(ipAddress))
                .Any();
                if (!isIPWhitelisted)
                {
                    _logger.LogWarning(
                    "Request from Remote IP address: {RemoteIp}
                    is forbidden.", ipAddress);
                    context.Response.StatusCode =
                    (int)HttpStatusCode.Forbidden;
                    return;
                }
            }            
            await _next.Invoke(context);
        }
    }

توجه داشته باشید که در این مثال، لیست سفید آدرس های IP برای همه افعال HTTP به جز HTTP Get کار می کند. اگر می‌خواهید این لیست سفید برای همه افعال HTTP اعمال شود، فقط می‌توانید عبارت زیر را در روش فراخوانی نظر دهید.

if (context.Request.Method != HttpMethod.Get.Method)

در متد Invoke میان‌افزار ما، همه آدرس‌های IP در لیست سفید را در یک لیست رشته می‌خوانیم. اگر آدرس IP که در آن درخواست منشا گرفته است با یکی از آدرس های IP موجود در لیست مطابقت داشته باشد، درخواست مجاز است. در غیر این صورت میان‌افزار HTTP 403 Forbidden را برمی‌گرداند و یک پیام گزارش ایجاد می‌شود.

نحوه استفاده از callback در جاوا

کلاس برنامه های افزودنی میان افزار IPWhitelist

اکنون یک کلاس با نام IPWhitelistMiddlewareExtensions ایجاد کنید و کد زیر را وارد کنید.

 public static class IPWhitelistMiddlewareExtensions
    {
        public static IApplicationBuilder UseIPWhitelist(this
        IApplicationBuilder builder)
        {
            return builder.UseMiddleware<IPWhitelistMiddleware>();
        }
    }

ما از میان‌افزار لیست سفید IP خود در کلاس Program همانطور که در بخش بعدی نشان داده شده است استفاده خواهیم کرد.

میان افزار لیست سفید IP را در کلاس Program پیکربندی کنید

شما باید میان افزار لیست سفید IP را در کلاس Program با استفاده از روش پیکربندی مجموعه Service پیکربندی کنید، همانطور که در قطعه کد زیر نشان داده شده است.

builder.Services.Configure<IPWhitelistOptions>(builder.Configuration.GetSection("IPWhitelistOptions"));

اکنون، خط کد زیر را در کلاس Program وارد کنید تا از متد افزونه‌ای که قبلا ایجاد کردیم استفاده کنید.

app.UseIPWhitelist();

کلاس برنامه شما اکنون چگونه باید باشد:

using IPWhiteListDemo;
using System.Configuration;
var builder = WebApplication.CreateBuilder(args);
builder.Services.Configure<IPWhitelistOptions>(builder.Configuration.GetSection("IPWhitelistOptions"));
builder.Services.AddControllers();
var app = builder.Build();
app.UseIPWhitelist();
app.UseAuthorization();
app.MapControllers();
app.Run();

در نهایت، برنامه را با فشار دادن کلید F5 در ویژوال استودیو اجرا کنید. برای آزمایش میان افزار، می توانید یک درخواست HTTP Post از Postman صادر کنید. اگر آدرس IP شما با هر یک از آدرس های IP موجود در لیست سفید مطابقت داشته باشد، درخواست مجاز خواهد بود. در غیر این صورت، درخواست رد می شود و میان افزار HTTP 403 Forbidden را برمی گرداند.