ASP.NET Core Kestrel 웹 서버를 사용한 호스트 필터링

Kestrel은 http://example.com:5000과 같은 접두사에 따라 구성을 지원하지만 Kestrel은 일반적으로 호스트 이름을 무시합니다. 호스트 localhost은 루프백 주소에 바인딩하는 데 사용된 특별한 경우입니다. 명시적 IP 주소를 제외한 모든 호스트는 모든 공용 IP 주소에 바인딩합니다. Host 헤더의 유효성이 검사되지 않았습니다.

해결 방법으로 호스트 필터링 미들웨어를 사용합니다. 미들웨어는 AddHostFiltering을 호출하는 CreateDefaultBuilder에 의해 추가됩니다.

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();
}

호스트 필터링 미들웨어는 기본적으로 비활성화됩니다. 미들웨어를 활성화하려면 appsettings.json/appsettings.{Environment}.json에서 AllowedHosts 키를 정의합니다. 값은 포트 번호 없이 세미콜론으로 구분된 호스트 이름 목록입니다.

:

{
  "AllowedHosts": "example.com;localhost"
}

참고 항목

전달된 헤더 미들웨어에는 AllowedHosts 옵션도 있습니다. 전달된 헤더 미들웨어 및 호스트 필터링 미들웨어는 다양한 시나리오에 대해 유사한 기능을 제공합니다. 전달된 헤더 미들웨어를 사용하여 AllowedHosts를 설정하는 작업은 역방향 프록시 서버 또는 부하 분산 장치를 사용하여 요청을 전달하는 동안 Host 헤더가 유지되지 않는 경우에 적합합니다. 호스트 필터링 미들웨어를 사용하여 AllowedHosts를 설정하는 것은 Kestrel이 공용 에지 서버로 사용되거나 Host 헤더가 직접 전달되는 경우에 적합합니다.

전달된 헤더 미들웨어에 대한 자세한 내용은 프록시 서버 및 부하 분산 장치를 사용하도록 ASP.NET Core 구성을 참조하세요.