ASP.NET Core 애플리케이션에서 HTTPS 강제 적용

ASP.NET Core 애플리케이션이 HTTPS만 사용하도록 강제하는 방법은 무엇입니까? 다양한 시나리오에 대한 모범 사례를 알아보세요.






사용 중인 프로그래밍 프레임워크에 관계없이 웹 애플리케이션에 보안을 부여하려면 HTTPS가 필수입니다. 하지만 클라이언트가 HTTPS 대신 HTTP를 사용하여 웹 앱을 호출하면 어떻게 될까요? HTTPS를 사용하도록 강제하려면 어떻게 해야 합니까? ASP.NET Core에서 제공하는 옵션을 자세히 살펴보겠습니다.

HTTPS 리디렉션 사용



가장 먼저 떠오르는 아이디어는 HTTP 요청을 리디렉션하는 것입니다. 클라이언트가 HTTP를 사용하여 애플리케이션을 호출하는 경우 애플리케이션은 HTTPS로 시작하는 동일한 URL로 리디렉션합니다. URL redirection은 잘 알려진 접근 방식입니다. 웹 애플리케이션은 다음 예제와 같이 3로 시작하는 상태 코드와 Location 헤더로 HTTP 응답을 생성합니다.

HTTP/1.1 301 Moved Permanently
Location: https://www.auth0.com/


이 접근 방식이 모든 보안 위험을 해결하지는 못하지만 그 과정에서 배우게 될 좋은 시작점입니다.

다행히 ASP.NET Core에서는 클라이언트 요청을 리디렉션하기 위해 HTTP 수준으로 이동할 필요가 없습니다. 선택할 수 있는 몇 가지 옵션이 있습니다. 각각을 분석해 봅시다.

RequireHttps 속성



살펴볼 첫 번째 접근 방식은 RequireHttps 특성을 기반으로 합니다. 다음 코드 조각과 같이 Razor Pages 애플리케이션에서 이를 사용하여 페이지에 HTTPS가 필요하도록 강제할 수 있습니다.

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;

namespace RazorApp.Pages;

[RequireHttps]
public class PrivacyModel : PageModel
{
  //...existing code...
}


이 페이지가 HTTP를 통해 호출되면 HTTPS 리디렉션 응답이 자동으로 생성됩니다. Razor Pages의 경우 RequireHttps 에서 상속하는 클래스에만 PageModel 특성을 적용할 수 있습니다. 클래스 메서드에도 특성을 적용할 수 없습니다.

ASP.NET Core MVC 애플리케이션에서는 다음 예제와 같이 RequireHttps 에서 상속된 클래스에 Controller 특성을 적용할 수 있습니다.

using System.Diagnostics;
using Microsoft.AspNetCore.Mvc;
using MvcApp.Models;

namespace MvcApp.Controllers;

[RequireHttps]
public class HomeController : Controller
{
  // ...existing code...
}


속성이 컨트롤러에 연결되면 컨트롤러에서 반환하는 모든 보기에 HTTP 리디렉션이 적용됩니다. 그러나 ASP.NET Core MVC의 경우 특정 보기에 RequireHttps 특성을 적용할 수 있습니다. 예를 들어 다음 코드는 개인 정보 보기에 대해서만 HTTPS 리디렉션을 요구하는 방법을 보여줍니다.

using System.Diagnostics;
using Microsoft.AspNetCore.Mvc;
using MvcApp.Models;

namespace MvcApp.Controllers;

public class HomeController : Controller
{
    public IActionResult Index()
    {
        return View();
    }

    [RequireHttps]
    public IActionResult Privacy()
    {
        return View();
    }
}

RequireHttps 특성을 기반으로 하는 리디렉션 접근 방식은 매우 간단합니다. HTTPS를 기밀 콘텐츠가 있는 페이지로만 제한할 수 있기 때문에 특정 페이지나 뷰에 선택적으로 적용할 수 있는 기회가 크다고 생각할 수도 있습니다.

실제로 HTTP와 HTTPS 페이지를 혼합하는 것은 정말 나쁜 생각입니다! 웹 응용 프로그램이 HTTPS downgrade attacks에 노출되어 있기 때문에 안전하지 않습니다. 이 위험을 완화하려면 HTTPS 프로토콜을 통해서만 모든 웹 애플리케이션의 페이지에 액세스할 수 있도록 하십시오.

위험을 줄이기 위해 모든 페이지에 RequireHttps 속성을 적용하는 것을 고려할 수 있지만 다음 섹션에서 볼 수 있듯이 더 나은 접근 방식이 있습니다.

Read more...

좋은 웹페이지 즐겨찾기