새소식

반응형
Java/Spring

Spring Security headers, frameOptions, contentSecurityPolicy, HTTP Strict Transport Security(HSTS)

  • -
반응형

Spring Security 에서 Http Response 에 대한 header 값을 설정하는 부분이 .headers 옵션이다.

 

기본적은 Spring Security headers 설정은 아래와 같다.

Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires:0
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block

 

 

.frameOptions(X-Frame-Options)

 

Http 헤더에서 X-Frame-Options 속성을 설정하는데 프레임(iframe)에 웹사이트를 제한하거나 접근 허용 범위를 설정할 수 있다. 쉽게 말해 <iframe> 이라는 html 태그가 존재하는데 해당 태그안에 다른 웹페이지를 삽입할 수 있다.

해당 iframe 태그를 사용하게 되면 클릭재킹이라는 해킹공격에 취약하다.

 

* 클릭재킹

삽입하는 웹페이지 내 악의적인 코드를 집어 넣어 정상적인 동작처럼 보이게 만든 후 사용자의 정보를 갈취하거나
사용자를 속이는 공격이다.

 

 

기본적으로 Spring Security 에서는 DENY 설정하여 클릭 재킹 공격을 막는다.

 

옵션 종류

  • DENY : iframe 불가
  • SAMEORIGIN : 동일 도메인 내 접근 가능
  • ALLOW-FROM {도메인} : 특정 도메인 접근 가능

 

Content Security Policy(CSP)

 

컨텐츠 보안 정책은 XSS 와 같은 컨텐츠 내의 인젝션 공격에 대한 취약점을 개선할 수 있는 설정이다.

 

위 설정을 보면 script-src 가 설정되어 있다.

javascript 에서 스크립트를 실행하게 되면 script-src 에 설정되어 있는 범위의 리소스가 맞는지 확인한 후

실행할지 결정한다.

script-src 'self' 다음 도메인에 대한 설정이 없으면 항상 스크립트를 실행할 수 없고

"script-src 'self' https://www.naver.com" 처럼 도메인이 설정되어 있으면 해당 도메인만 실행할 수 있다.

 

설정값

  • default-src : src 로 끝나는 모든 리소스의 기본 동작을 설정
  • script-src : Javascript 태그 관련 권한과 출처 설정
  • style-src : 스타일시트 관련 권한과 출처 설정

구성값

  • none : 모든 출처를 허용하지 않음
  • self : Origin 내에서 로드하는 리소스만 허용
  • unsafe-inline : 인라인 코드의 사용을 허용

 

 

contentTypeOptions(X-Content-Type-Options)

contentTypeOptions() 설정은 응답 헤더의 X-Content-Type-Options 를 설정하며

Spring Security 의 기본값은 "nosniff" 설정이며 컨텐츠 스니핑을 비활성화 한다.

 

 

 

HTTP Strict Transport Security(HSTS)

.headers(headers -> headers
	.httpStrictTransportSecurity(hsts -> hsts
    	.includeSubDomains(true)
        .preload(true)
        .maxAgeInSeconds(31536000)
    )
)

 

특정 웹사이트에 URL 을 적어 접근할때 https:// 처럼 문구를 생략하고 접근할때가 많다.

이러한 URL 접근은 중간자 공격에 취약하다.

이러한 취약점을 예방하기 위해 HSTS 설정이 필요하다.

 

HSTS 설정은 HTTP 로 액세스 하려는 모든 시도에 대해 HTTPS 요청으로 자동 변환해야 한다고 브라우저에게

알려주는 기능을 한다.

쉽게 말해 사용자가 http 프로토콜로 접근했을 떄 브라우저에게 해당 웹사이트는 HTTPS 프로토콜로 접근해야

한다라고 미리 알 수 있게 한다.

 

  • includeSubDomains(true) : 하위 도메인도 HSTS 도메인으로 취급해야한다 라고 알린다.
  • preload(true) : 브라우저에게 이 도메인을 미리 HSTS 도메인으로 로드하도록 알린다.
  • maxAgeInSeconds(시간) : 시간 설정

 

 

 

 

 

 

 

 

 

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.