ysk(0soo)
Lifealong
ysk(0soo)
전체 방문자
오늘
어제
  • 분류 전체보기 (238)
    • Java (50)
      • whiteship-java-study (11)
      • Java (28)
      • time (6)
    • Spring (68)
      • JPA (15)
      • Spring (1)
      • SpringBoot (1)
      • SpringMVC (6)
      • Spring Security (22)
      • Jdbc (1)
      • RestDocs (14)
      • log (6)
    • Kotlin (3)
    • Web (2)
      • nginx (1)
    • Database (14)
      • MySQL (5)
      • PostgreSQL (1)
      • SQL (1)
      • Redis (4)
    • C, C++ (0)
    • Git (1)
    • Docker (2)
    • Cloud (3)
      • AWS (3)
    • 도서, 강의 (0)
      • t5 (0)
    • 기타 (7)
      • 프로그래밍 (1)
    • 끄적끄적 (0)
    • CS (14)
      • 운영체제(OS) (2)
      • 자료구조(Data Structure) (9)
    • 하루한개 (12)
      • 우아한 테크코스-10분테코톡 (12)
    • 스터디 (12)
      • 클린 아키텍처- 로버트마틴 (2)
      • JPA 프로그래밍 스터디 (10)
    • 테스트 (34)
      • JUnit (19)
      • nGrinder (2)
      • JMeter (0)
    • Infra (3)
    • 프로그래머스 백엔드 데브코스 3기 (0)
    • 디자인 패턴 (3)
    • Issue (4)
    • system (1)
      • grafana (0)
      • Prometheus (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • github

공지사항

인기 글

태그

  • mysql
  • jpa
  • StructuredConcorrency
  • VirtualThread Springboot
  • restdocs custom
  • AuthenticationException
  • 가상 스레드
  • node exporter basic auth
  • tree
  • java
  • AccessDecisionVoter 커스텀
  • scope value
  • 정규표현식
  • nGrinder
  • AccessDecisionManager
  • restdocs enum
  • 동일성
  • 동등성
  • LocalDateTime
  • UserDetailsService
  • 동시성 제어
  • nginx basic auth
  • 가상 스레드 예외 핸들링
  • querydsl
  • 구조화된 동시성
  • DataJpaTest
  • FilterSecurityInterceptor
  • 트랜잭션
  • 인가(Authorization) 처리
  • junit5

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ysk(0soo)

Lifealong

Spring/Spring Security

HeaderWriterFilter - 응답헤더에 보안 관련 헤더 추가하는 필터

2022. 12. 19. 17:41

HeaderWriterFilter - 응답헤더에 보안 관련 헤더 추가하는 필터

응답 헤더에 보안 관련 헤더를 추가해준다.

기본적으로 생성되는 필터이며 앞단부분에 위치하는 필터이다

 

내부적으로 HeaderWrite 인터페이스를 List로 가지고 있다.

private final List<HeaderWriter> headerWriters;

기본적으로 5개의 header writer 적용

  • XContentTypeOptionsHeaderWriter : MIME타입 스니핑 방어
  • XXssProtectionHeaderWriter : 브라우저에 내장된 XSS 필터 적용
  • CacheControlHeadersWriter : 캐시 히스토리 취약점 방어
  • XFrameOptionsHeaderWriter : HTML삽입 취약점 방어로 iframe, object 등을 삽입을 방지함(clickjacking 방어)
  • HstsHeaderWriter : https 프로토콜 사용을 강제(https를 사용해야함)

관련 이슈에 대해 기본적인 방어 기능만 제공하는것으로 완벽하게 방어되지 않으며 또한 브라우저마다 다르게 동작할 수 있으므로 유의해야한다

Response의 헤더

// Resopnse Header
HTTP/1.1 200
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Type: text/html;charset=UTF-8
Content-Language: ko-KR
Transfer-Encoding: chunked
Date: Wed, 22 Aug 2019 17:18:41 GMT
Keep-Alive: timeout=60
Connection: keep-alive

XContentTypeOptionsHeaderWriter: 마임 타입 스니핑 방어.

  • 브라우서에서 MIME sniffing을 사용하여 Request Content Type 을 추측 할 수 있는데 이것은 XSS 공격에 악용될 수 있음
  • 지정된 MIME 형식 이외의 다른 용도로 사용하고자 하는 것을 차단
X-Content-Type-Options: nosniff

MIME 형식의 보안위협 완화: X-Content-Type-Options 헤더

X-Content-Type-Options: nosniff
이 헤더는 리소스를 다운로드 할때 해당 리소스의 MIMETYPE이 일치하지 않는 경우 차단을 할 수 있다. 위 처럼 설정하는 경우 styleSheet는 MIMETYPE이 text/css와 일치할 때까지 styleSheet를 로드하지 않는다. 또한 공격자가 다른 확장자(jpg)로 서버에 파일을 업로드 한 후 script태그등의 src의 경로를 변경하여 script를 로드 하는 등의 공격을 막아준다.

XXssProtectionHeaderWriter: 브라우저에 내장된 XSS 필터 적용.

  • XSS — 웹 상에서 가장 기초적인 취약점 공격 방법의 일종으로, 악의적인 사용자가 공격하려는 사이트에 스크립트를 넣는 기법을 말함
  • 일반적으로 브라우저에는 XSS공격을 방어하기 위한 필터링 기능이 내장되어 있음
  • 물론 해당 필터로 XSS공격을 완벽하게 방어하지는 못하지만 XSS 공격의 보호에 많은 도움이 됨
X-XSS-Protection: 1; mode=block

X-XSS-Protection헤더 시험 페이지

이 헤더는 공격자가 XSS공격을 시도할 때 브라우저의 내장 XSS Filter를 통해 공격을 방지할 수 있는 헤더 위 처럼 설정한 경우 브라우저가 XSS공격을 감지하면 자동으로 내용을 치환한다. mode=block 유무에 따라 내용만 치환 하고 사용자화면에 보여주거나 페이지 로드 자체를 block할 수 있다.
위 헤더는 브라우저의 내장 XSS Filter에 의해 처리 되므로 각 브라우저마다 처리 방식이 다를 수 있다. 모든 공격을 막을 수는 없기 때문에 추가적으로 Filter를 설정하여 방어해야 한다. X-XSS-Protection: 1; mode=block

CacheControlHeadersWriter: 캐시 히스토리 취약점 방어.

  • 캐시를 사용하지 않도록 설정
    • 브라우저 캐시 설정에 따라 사용자가 인증 후 방문한 페이지를 로그 아웃한 후 캐시 된 페이지를 악의적인 사용자가 볼 수 있음
    Cache-Control: no-cache, no-store, max-age=0, must-revalidate
    Pragma: no-cache
    Expires: 0

공격자가 브라우저의 히스토리를 통한 공격을 진행 할 수 있기 때문에 cache를 적용하지 않는다는 헤더 Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0

HstsHeaderWriter: HTTPS로만 소통하도록 강제.

Strict-Transport-Security: max-age=31536000 ; includeSubDomains

Strict-Transport-Security - HTTP | MDN

이 헤더는 한번 https로 접속 하는 경우 이후의 모든 요청을 http로 요청하더라도 브라우저가 자동으로 https로 요청
Strict-Transport-Security: max-age=31536000;includeSubDomains;preload
https로 전송한 요청을 중간자가 가로채어 내용을 볼 수 있는(MIMT)기법을 클라이언트 레벨(브라우저)에서 차단
또한 2014년 블랙햇 아시아 컨퍼런스에서 "Leonard Nve Egea"가 sslStrip+ 를 공개하면서
서브도메인을 통해 우회할 수 있는 방법에 대해 includeSubDomains 를 추가하여 차단할수 있다.

XFrameOptionsHeaderWriter: clickjacking 방어

  • 웹 사용자가 자신이 클릭하고 있다고 인지하는 것과 다른 어떤 것을 클릭하게 속이는 악의적인 기법
  • 보통 사용자의 인식 없이 실행될 수 있는 임베디드 코드나 스크립트의 형태
X-Frame-Options: DENY

클릭재킹 - 위키백과, 우리 모두의 백과사전

이 헤더는 한번 https로 접속 하는 경우 이후의 모든 요청을 http로 요청하더라도 브라우저가 자동으로 https로 요청
Strict-Transport-Security: max-age=31536000;includeSubDomains;preload
https로 전송한 요청을 중간자가 가로채어 내용을 볼 수 있는(MIMT)기법을 클라이언트 레벨(브라우저)에서 차단
또한 2014년 블랙햇 아시아 컨퍼런스에서 "Leonard Nve Egea"가 sslStrip+ 를 공개하면서 서브도메인을 통해 우회할 수
있는 방법에 대해 includeSubDomains 를 추가하여 차단할수 있습니다.

참고

  • X-Content-Type-Options:
    • https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options
  • Cache-Control:
    • https://www.owasp.org/index.php/Testing_for_Browser_cache_weakness_(OTGAUTHN-006)
  • X-XSS-Protection
    • https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-XSS-Protection
    • https://github.com/naver/lucy-xss-filter
  • HSTS
    • https://cheatsheetseries.owasp.org/cheatsheets/HTTP_Strict_Transport_Security_Cheat_Sheet.html
  • X-Frame-Options○
    • https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
  • https://cyberx.tistory.com/171
저작자표시 비영리 (새창열림)

'Spring > Spring Security' 카테고리의 다른 글

AccessDecisionVoter 커스텀  (0) 2022.12.19
ExceptionTranslationFilter - 예외 전환 필터  (0) 2022.12.19
AccessDecisionManager, AccessDecisionVoter - 인가 결정 심의자  (0) 2022.12.19
Security 인가 처리 개념 및 과정 (Authorization), AccessDecisionManager  (0) 2022.12.19
FilterSecurityInterceptor - 인가(Authorization) 처리 필터  (1) 2022.12.19
    'Spring/Spring Security' 카테고리의 다른 글
    • AccessDecisionVoter 커스텀
    • ExceptionTranslationFilter - 예외 전환 필터
    • AccessDecisionManager, AccessDecisionVoter - 인가 결정 심의자
    • Security 인가 처리 개념 및 과정 (Authorization), AccessDecisionManager
    ysk(0soo)
    ysk(0soo)
    백엔드 개발을 좋아합니다. java kotlin spring, infra 에 관심이 많습니다. email : kim206gh@naver.com github : https://github.com/devysk

    티스토리툴바