Django Middleware 역할

·2022년 6월 17일
0
post-thumbnail

Middleware 역할: HTTP 헤더 정보 관리

Security Middleware

  • Response에 HTTP Strict Transport Security(HSTS) 헤더 추가
    • HTTPS 연결을 강제하기 위함
  • Response에 Referer-Policy 헤더 추가
    • client가 referer를 보내도록 하기 위함
    • CSRF middleware에서 referer가 필요
  • Response에 Cross-Origin-Opener-Policy 추가
  • Response에 X-Content-Type-Option: nosniff 헤더 추가
    • 서버 공격 스크립트를 업로드하는 것을 방지
  • SSL Redirect
    • HTTP 연결에 301 상태 코드를 보내고 HTTPS로 redirect하도록 함

Session Middleware

  • Session에서 Client에 대한 정보 관리
    • Cookie, Session연결시간 등

CSRFViewMiddleware

  • CSRF 공격 방어
  • Response에 CSRFcookie를 통해 random secret 값 추가
  • Safe Method(GET, HEAD, OPTIONS, TRACE)가 아닌 Request에 CSRFCookie가 없거나 적절하지 않으면 403 error반환

XFrameOptionsMiddleware

  • Clickjacking 공격 방어
  • Response에 X-Frame-Options 헤더 추가
    • iframe 리소스가 sameorigin이어야 실행할 수 있도록 브라우저가 지원

CommonMiddleware

  • user agents 필터링
  • APPEND_SLASH, PREPEND_WWW세팅에 따라 URL path 재구성
  • Response에 Content-Length가 필요한 경우 추가

AuthenticationMiddleware

  • Request를 보낸 사용자가 인증된 사용자인지 확인하고 user attribute를 추가

GzipMiddleware

  • HTTP 헤더에 인코딩 정보 추가 (GzipMiddleware)
    • HTTP body의 Gzip 압축도 동시에

Middleware의 순서

  • Middleware는 Setting에 나열된 middleware의 순서에 따라 request를 처리하고, 역순으로 response를 처리한다.
  • 일반적인 순서는 다음과 같다
    • SecurityMiddleware
    • GZipMiddleware
    • SessionMiddleware
    • CommonMiddleware
    • CSRFMiddleware
    • AuthenticationMiddleware
  • 필요한 Middleware가 있는 경우 middleware를 생성하고 적절한 위치에 추가한다.
profile
Ben

0개의 댓글