반응형
1. 개요
- SameSite는 사이트 간 요청과 함께 쿠키를 보낼지 여부를 제어하기 위해 웹 개발자가 설정할 수 있는 쿠키 속성
- 아울러 GS인증 보안성에서도 최근에 확인하는 항목으로 이와 별개로 SSL적용과 함께 필수적으로 처리해아한다.
- SameSite쿠키를 적용하기 위해서는 SSL이 필수적으로 적용되어 있어야한다.
2. SameSite 쿠키 정책종류
- Strict : 쿠키는 자사 컨텍스트에서만 전송됩니다. 즉, 쿠키를 설정한 동일한 도메인으로만 전송됩니다.
- Lax : 교차 사이트 요청에서도 쿠키가 전송되지만 사용자가 쿠키를 설정한 사이트와 상호 작용한 경우(예: 링크 클릭)에만 쿠키가 전송됩니다.
- None : 소스에 관계없이 모든 요청에 대해 쿠키가 전송됩니다.
3. Strict 적용사례
- 브라우저 애플리케이션 부분 SameSite 영역에 Strict가 표기된다.
- 예시 : proxy_cookie_path / "/; secure; HttpOnly; SameSite=Strict"; ( HttpOnly 또는 Secure 추가옵션)
- 예시 : proxy_cookie_path / "/; SameSite=Strict"; (일반)
- None / Strict / Lax 별 적용화면
4. [Nginx 적용]
//Strict
proxy_cookie_path / "/; secure; HttpOnly; SameSite=Strict";
또는
proxy_cookie_path / "/; SameSite=Strict"
//Lax
proxy_cookie_path / "/; secure; HttpOnly; SameSite=Lax";
또는
proxy_cookie_path / "/; SameSite=Lax"
//None
proxy_cookie_path / "/; secure; HttpOnly; SameSite=None";
또는
proxy_cookie_path / "/; SameSite=None"
5. [Tomcat 8.5이상 적용]
- context.xml - tomcat경로내
# tomcat/conf/context.xml
# samesite 설정을 none으로 바꾸기
<Context>
...
<CookieProcessor sameSiteCookies="none" />
...
</Context>
- web.xml - tomcat경로내
# tomcat/conf/web.xml
...
<session-config>
<session-timeout>60</session-timeout>
<tracking-mode>COOKIE</tracking-mode>
<cookie-config>
<http-only>true</http-only>
<secure>true</secure>
</cookie-config>
</session-config>
...
6. [Spring 3~4버전 또는 Java]
- 아래코드를 사용한다.
- XML파일에 Filter를 설정하거나 하면 된다.
//SameSiteFilter.java파일생성
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class SameSiteFilter implements Filter {
@SuppressWarnings("unused")
private FilterConfig config;
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
res.setHeader("Set-Cookie", "locale=pt-BR; HttpOnly; Secure; SameSite=Strict;");
chain.doFilter(req, res);
}
public void init(FilterConfig config) throws ServletException {
this.config = config;
}
public void destroy() {
}
}
7. [전자정부프레임워크 3.x 이상]
- 전자정부프레임워크 내에서는 아래처럼 작성한다.
//해당파일내 소스추가
EgovWebApplicationInitializer.java
...
FilterRegistration.Dynamic sameSiteFilter = servletContext.addFilter("sameSiteFilter", new SameSiteFilter());
sameSiteFilter.addMappingForUrlPatterns(null, false, "/*");
...
//SameSiteFilter.java파일생성
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class SameSiteFilter implements Filter {
@SuppressWarnings("unused")
private FilterConfig config;
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
res.setHeader("Set-Cookie", "locale=pt-BR; HttpOnly; Secure; SameSite=Strict;");
chain.doFilter(req, res);
}
public void init(FilterConfig config) throws ServletException {
this.config = config;
}
public void destroy() {
}
}
6. [Spring-Boot]
- application.properties파일일경우
//strict
server.servlet.session.cookie.same-site=strict
//lax
server.servlet.session.cookie.same-site=lax
//none
server.servlet.session.cookie.same-site=none
- application.yml 파일일경우
//strict의경우
sever:
servlet:
session:
cookie:
same-site:"strict"
//lax의경우
sever:
servlet:
session:
cookie:
same-site:"lax"
//none일경우 SameSite 속성을 None으로 설정할 경우 Secure 속성을 함께 추가해야함
sever:
servlet:
session:
cookie:
same-site:"strict"
secure:true
★. Cookie관련
- 아래문법에서 cookie.setSameSite 는 사용할수없다. (빨간줄 표시로 인식불가)
- javax.servlet.http.Cookie는 Servlet API 4.0에서 도입되서 4.0이전버전은 해당기능을 사용할수 없다.
Cookie cookie = new Cookie("cookieName", "cookieValue");
cookie.setSecure(true); // optional - sets the "Secure" attribute to ensure the cookie is only sent over HTTPS
cookie.setHttpOnly(true); // optional - sets the "HttpOnly" attribute to prevent client-side script access
cookie.setSameSite("Strict"); // sets the "SameSite" attribute to "Strict"
반응형
'IT정보 > 보안' 카테고리의 다른 글
[Nginx] X-Frame-Options 웹취약점 예제, 명령어 (gs인증) (0) | 2023.08.08 |
---|---|
[보안] CORS 처리활성화 여러가지방법(GS인증 보안성) (0) | 2023.04.20 |