> 백엔드 개발 > C++ > 무단 요청으로부터 API를 보호하는 방법

무단 요청으로부터 API를 보호하는 방법

DDD
풀어 주다: 2025-01-23 00:15:09
원래의
803명이 탐색했습니다.

How to Secure Your API Against Unauthorized Requests

최신 애플리케이션에서 API는 다양한 시스템을 연결하는 중요한 역할을 합니다. 그러나 API는 무단 액세스 및 남용의 일반적인 대상이기도 합니다. API 보안에는 CORS 검증, 강력한 인증 메커니즘, 안정적인 모니터링을 결합한 여러 계층의 보호가 필요합니다. 이 문서에서는 신뢰할 수 있는 클라이언트만 액세스할 수 있도록 API를 보호하기 위한 몇 가지 전략을 설명합니다.


1. CORS를 올바르게 구성하세요

CORS(Cross-Origin Resource Sharing)는 API와 상호 작용할 수 있는 원본을 결정하는 중요한 보안 메커니즘입니다. 무단 액세스를 방지하려면 CORS를 올바르게 구성하는 것이 중요합니다.

ASP.NET Core 예:

<code class="language-csharp">builder.Services.AddCors(options =>
{
    options.AddPolicy("RestrictOrigins", policy =>
    {
        policy.WithOrigins("https://mywebsite.com", "https://trustedpartner.com") // 允许的来源
              .AllowAnyHeader()
              .AllowAnyMethod();
    });
});

// 应用 CORS 策略
app.UseCors("RestrictOrigins");</code>
로그인 후 복사
로그인 후 복사

주요 규칙:

  • AllowAnyOrigin 방지: 모든 출처를 허용하면 API가 취약해집니다.
  • SetIsOriginAllowed(_ => true)를 사용하지 마세요: 원본 확인을 완전히 우회합니다.
  • 메서드 및 헤더 제한: AllowAnyMethod 및 AllowAnyHeader를 꼭 필요한 범위로 제한합니다.

2. 인증 및 승인 구현

인증을 통해 승인된 사용자 또는 시스템만 엔드포인트에 액세스할 수 있습니다. 일반적인 방법 중 하나는 JWT(JSON 웹 토큰)를 사용하는 것입니다.

JWT 구현 단계:

  1. 클라이언트 측에서는 요청 헤더에 JWT를 보냅니다.
<code>   Authorization: Bearer <your-jwt-token></code>
로그인 후 복사
  1. 서버 측에서 토큰을 확인하세요.
<code class="language-csharp">   app.UseAuthentication();
   app.UseAuthorization();</code>
로그인 후 복사

ASP.NET Core 샘플 구성:

<code class="language-csharp">builder.Services.AddAuthentication("Bearer")
    .AddJwtBearer(options =>
    {
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuer = true,
            ValidateAudience = true,
            ValidateLifetime = true,
            ValidateIssuerSigningKey = true,
            ValidIssuer = "https://mywebsite.com",
            ValidAudience = "https://mywebsite.com",
            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("secret-key"))
        };
    });</code>
로그인 후 복사

3. Origin 헤더를 명시적으로 확인

CORS가 구성된 경우에도 서버 측 미들웨어에서 Origin 헤더를 수동으로 검증하여 추가 보안 계층을 추가할 수 있습니다.

예:

<code class="language-csharp">app.Use(async (context, next) =>
{
    var origin = context.Request.Headers["Origin"].ToString();
    var allowedOrigins = new[] { "https://mywebsite.com", "https://trustedpartner.com" };

    if (!string.IsNullOrEmpty(origin) && !allowedOrigins.Contains(origin))
    {
        context.Response.StatusCode = StatusCodes.Status403Forbidden;
        await context.Response.WriteAsync("Origin not allowed.");
        return;
    }

    await next();
});</code>
로그인 후 복사

4. 의심 IP 차단

알려진 악성 IP 주소의 요청을 필터링하고 차단하여 공격 벡터를 줄입니다.

예시 미들웨어:

<code class="language-csharp">app.Use(async (context, next) =>
{
    var clientIp = context.Connection.RemoteIpAddress;
    var blockedIps = new[] { "192.168.1.100", "10.0.0.50" };

    if (blockedIps.Contains(clientIp.ToString()))
    {
        context.Response.StatusCode = StatusCodes.Status403Forbidden;
        await context.Response.WriteAsync("Blocked IP.");
        return;
    }

    await next();
});</code>
로그인 후 복사

5. 속도 제한 구현

클라이언트가 보낼 수 있는 요청 수를 제한하여 API를 남용 및 무차별 대입 공격으로부터 보호하세요.

ASP.NET Core 예:

패키지 설치:

<code class="language-bash">dotnet add package AspNetCoreRateLimit</code>
로그인 후 복사

비율 제한 구성:

<code class="language-csharp">builder.Services.AddMemoryCache();
builder.Services.Configure<IpRateLimitOptions>(options =>
{
    options.GeneralRules = new List<RateLimitRule>
    {
        new RateLimitRule
        {
            Endpoint = "*",
            Limit = 100, // 请求限制
            Period = "1m" // 每分钟
        }
    };
});

builder.Services.AddInMemoryRateLimiting();
app.UseIpRateLimiting();</code>
로그인 후 복사

6. 모든 연결에 HTTPS를 사용하세요

HTTPS를 강제로 사용하여 클라이언트와 API 간의 보안 통신을 보장하세요.

ASP.NET Core에서 HTTPS 구성:

<code class="language-csharp">webBuilder.UseKestrel()
          .UseHttps();</code>
로그인 후 복사

HTTP 트래픽을 HTTPS로 리디렉션:

<code class="language-csharp">app.UseHttpsRedirection();</code>
로그인 후 복사

7. 요청 모니터링 및 로깅

알 수 없는 소스로부터의 여러 요청과 같은 비정상적인 패턴을 감지하려면 로깅을 구현하세요.

예:

<code class="language-csharp">app.Use(async (context, next) =>
{
    var origin = context.Request.Headers["Origin"].ToString();
    Console.WriteLine($"Request from origin: {origin}");
    await next();
});</code>
로그인 후 복사

포괄적인 모니터링을 위해 Application Insights, Serilog 또는 Elastic Stack과 같은 도구를 사용하세요.


8. 자세한 오류 응답을 피하세요

공격자에게 도움이 될 수 있으므로 오류 메시지에 민감한 정보를 노출하지 마세요.

예:

<code class="language-csharp">builder.Services.AddCors(options =>
{
    options.AddPolicy("RestrictOrigins", policy =>
    {
        policy.WithOrigins("https://mywebsite.com", "https://trustedpartner.com") // 允许的来源
              .AllowAnyHeader()
              .AllowAnyMethod();
    });
});

// 应用 CORS 策略
app.UseCors("RestrictOrigins");</code>
로그인 후 복사
로그인 후 복사

결론

무단 요청으로부터 API를 보호하려면 다계층 접근 방식이 필요합니다.

  1. CORS를 올바르게 구성하세요.
  2. 소스와 헤더를 명시적으로 확인하세요.
  3. 인증속도 제한을 구현합니다.
  4. HTTPS를 사용하고 트래픽을 모니터링하세요.

이러한 모범 사례를 따르면 무단 액세스 위험을 크게 줄이고 신뢰할 수 있는 클라이언트만 API와 상호 작용할 수 있도록 할 수 있습니다.

위 내용은 무단 요청으로부터 API를 보호하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿