[파이썬 Projects]/<파이썬 웹개발>

[파이썬] FastAPI - 미들웨어(middleware) - 1: TrustedHostMiddleware

기록자_Recordian 2025. 5. 8. 13:21
728x90
반응형
이전 내용
 

[FastAPI] 캐싱(caching)

이전 내용 [FastAPI] 파일 업로드이전 내용 [FastAPI] 비동기 처리 (asynchronous processing)이전 내용 [FastAPI] 고급 인증: 세션이전 내용 [FastAPI] 고급인증: JWT이전 내용 [FastAPI] 인증과 세션이전 내용 [FastAPI]

puppy-foot-it.tistory.com


미들웨어

 

미들웨어는,

요청과 응답 사이에 위치하는 소프트웨어 계층이며 소프트웨어 시스템 내에서 다양한 컴포턴트 간의 통신을 가능하게 한다. 이를 통해 서로 다른 시스템을 연결하고, 데이터를 주고 받을 수 있도록 중간에서 매개 역할을 수행하여 캐싱, 보안, 데이터 변환 등 다양한 작업을 처리할 수 있다.

 

FastAPI에서 미들웨어(Middleware)는 요청 처리 과정에서 특정 작업을 수행할 수 있는 기능으로, 요청과 응답 사이에 개입하여 기능을 추가하거나 변환할 수 있다. 미들웨어는 애플리케이션의 모든 요청 및 응답에 대해 동작하며, 주로 인증, 로깅, 세션 관리, CORS 설정 등 다양한 목적을 위해 사용된다.

- 미들웨어 정의: 미들웨어는 요청이 애플리케이션에 도달하기 전에 또는 응답이 클라이언트에 도달하기 전에 실행되는 함수를 정의할 수 있다.
- 요청과 응답의 수정: 미들웨어는 요청의 내용을 수정하거나, 응답을 변경할 수 있는 권한을 가진다.


FastAPI 주요 미들웨어
1. TrustedHostMiddleware

 

FastAPI는 Starlette을 기반으로 하고 ASGI 사양을 구현하므로 모든 ASGI 미들웨어를 사용할 수 있다. FastAPI에서 미들웨어를 설정하는 방법은 다양한데, 그 중 app.add_middleware() 메서드가 가장 일반적이고 가장 간단한 설정으로도 애플리케이션의 보안을 크게 강화할 수 있다.

 

◆ 통합 미들웨어

 

1. TrustedHostMiddleware

이 미들웨어는 웹 애플리케이션의 보안을 강화하는 미들웨어로, 이 미들웨어는 들어오는 모든 HTTP 요청의 "Host" 헤더를 검사하여 요청이 허용된 호스트 목록에 있는지 확인한다.

이렇게 하면 DNS 리바인딩, SSRF(Server Side Request Forgery) 같은 공격을 예방할 수 있다.

- DNS 리바인딩 (DNS Rebinding): 브라우저가 악성 서버의 IP를 변경하여 로컬 네트워크로의 요청을 유도하는 공격. 악성 사용자가 특정 도메인 이름을 이용해, 피해자의 브라우저가 로컬 네트워크상의 다른 서버에 요청을 보내도록 유도하는 기법으로, 이를 통해 공격자는 사용자의 로컬 네트워크에 있는 서비스에 접근하여 중요한 데이터를 유출할 수 있다.

- SSRF (Server Side Request Forgery)
: SSRF는 공격자가 취약한 서버에 악의적인 요청을 보내도록 유도하는 공격 기법으로, 이 공격은 사용자가 신뢰하는 서버가 외부 혹은 내부 리소스에 요청을 보내는 데 사용.

 

- 실무에서 적용 방법

  • API 게이트웨이: 여러 서비스로의 라우팅을 담당하는 API 게이트웨이에서 특정 서비스에 대한 요청만을 허용
  • 멀티 테넌시: 하나의 애플리케이션에서 여러 도메인을 서비스하는 경우, 도메인별로 접근을 제한

[TrustedHostMiddleware 테스트]

from fastapi import FastAPI, HTTPException
from fastapi.middleware.trustedhost import TrustedHostMiddleware

app = FastAPI()

app.add_middleware(
    TrustedHostMiddleware,
    allowed_hosts=["example.com", "*.example.com", "localhost", "127.0.0.1"]
)

@app.get("/")
async def main():
    return {"message": "Hello FastAPI!"}
  • app.add_middleware(TrustedHostMiddleware, allowed_hosts=["example.com", "*.example.com"]): app.add_middleware() 메서드를 사용하여 FastAPI 애플리케이션 객체에 미들웨어 추가.
  • 첫번째 인자: 미들웨어 클래스 지정
  • allowed_host 인자: 허용되는 호스트 목록 지정. 와일드카드(*)를 사용하여 여러 서브도메인을 한 번에 허용 가능
※ allowed_host 옵션
- 도메인 이름: 명확한 도메인 이름 명시. ex) "example.com"
- 와일드카드 서브 도메인: 와일드카드를 사용해 모든 서브도메인 허용. ex) "*.example.com"
- IP 주소: 특정 IP 주소 허용 ex) "192.168.1.1"
- 로컬호스트: 개발이나 테스트를 위해 localhost 또는 127.0.0.1 허용

 

main.py를 실행하고 포스트맨으로 들어가서 확인해보면 허용된 도메인이므로 정상적인 응답을 반환받는다.


[참고]

위키백과 - 미들웨어

https://medium.com/twolinecode/13-%EB%AF%B8%EB%93%A4%EC%9B%A8%EC%96%B4-middleware-%EB%9E%80-23abb33ec4f4

https://www.redhat.com/ko/topics/middleware/what-is-middleware

https://fastapi.tiangolo.com/ko/advanced/middleware/?h=middlewares

가장 빠른 풀스택을 위한 플라스크 & FastAPI


다음 내용

 

[FastAPI] 미들웨어(middleware) - 2: CORS

이전 내용 [FastAPI] 미들웨어(middleware) - 1: TrustedHostMiddleware이전 내용 [FastAPI] 캐싱(caching)이전 내용 [FastAPI] 파일 업로드이전 내용 [FastAPI] 비동기 처리 (asynchronous processing)이전 내용 [FastAPI] 고급 인

puppy-foot-it.tistory.com

728x90
반응형