Middleware 역할: HTTP 헤더 정보 관리
Security Middleware
- Response에 HTTP Strict Transport Security(HSTS) 헤더 추가
- 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에 대한 정보 관리
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
)
Middleware의 순서
- Middleware는 Setting에 나열된 middleware의 순서에 따라 request를 처리하고, 역순으로 response를 처리한다.
- 일반적인 순서는 다음과 같다
- SecurityMiddleware
- GZipMiddleware
- SessionMiddleware
- CommonMiddleware
- CSRFMiddleware
- AuthenticationMiddleware
- 필요한 Middleware가 있는 경우 middleware를 생성하고 적절한 위치에 추가한다.