반응형
SameSite 속성은 웹 애플리케이션에서 쿠키의 보안을 강화하는 데 사용됩니다. 주로 사이트 간 요청 위조(CSRF) 공격을 방지하기 위해 사용되며, 다음과 같은 옵션이 있습니다:
- SameSite=Strict: 쿠키를 발급한 사이트에서만 접근할 수 있으며, 다른 사이트에서 접근하는 모든 요청에 대해 쿠키가 전송되지 않습니다. 가장 안전한 설정이지만 사용성 측면에서는 제한적입니다.
- SameSite=Lax: 기본 옵션으로, 쿠키가 외부 사이트에서의 GET 요청에는 전송되지만 POST 요청에는 전송되지 않습니다. 보안성과 접근성의 균형을 맞추는 설정입니다.
- SameSite=None: 모든 요청에 대해 쿠키가 전송되도록 하며, 특히 서드파티 쿠키를 사용하는 경우 필요합니다. 이 경우
Secure
속성을 함께 설정해야 합니다. 그렇지 않으면 쿠키가 무시됩니다.
1. 보안 문제
- CSRF: 공격자가 사용자의 인증된 세션을 악용해 특정 작업을 수행하도록 유도하는 공격입니다. SameSite 속성을 설정하면 CSRF 공격의 위험을 줄일 수 있습니다.
- XSS: 사이트 간 스크립팅 공격으로, 공격자가 사용자의 브라우저에서 임의의 스크립트를 실행하는 방법입니다. SameSite는 XSS를 직접적으로 방어하지 않으나, 보안을 강화하는 한 요소로 작용합니다.
- 서드파티 추적: SameSite 설정을 통해 불필요한 서드파티 쿠키가 사용자의 브라우저에 전송되는 것을 방지해, 추적을 줄이는 데 도움을 줍니다.
2. Apache에서 SameSite 설정 방법
Apache 서버에서는 Header
지시어를 사용해 응답 헤더에 쿠키 속성을 설정할 수 있습니다. 이를 통해 SameSite 속성을 추가할 수 있습니다. 예시로는 Set-Cookie
헤더를 조작하는 방법이 있습니다.
- /etc/apache2/site-available/000-default.conf
<IfModule mod_headers.c>
Header set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data:"
Header set Referrer-Policy "strict-origin-when-cross-origin"
Header set Set-Cookie "Secure; HttpOnly; SameSite=Strict"
</IfModule>
# Apache 설정 파일 (예: httpd.conf 또는 .htaccess)
# SameSite=Lax 예시
Header always edit Set-Cookie ^(.*)$ "$1; SameSite=Lax"
# SameSite=Strict 예시
Header always edit Set-Cookie ^(.*)$ "$1; SameSite=Strict"
# SameSite=None 예시 (HTTPS만 가능)
Header always edit Set-Cookie ^(.*)$ "$1; Secure; SameSite=None"
3. Apache Tomcat에서 SameSite 설정 방법
Tomcat은 기본적으로 SameSite 속성을 직접 설정할 수 없으므로, 커스텀 필터를 추가하거나 context.xml
파일에서 쿠키 속성을 추가하는 방식으로 설정합니다.
방법 1: 커스텀 필터 사용
쿠키에 SameSite 속성을 추가하는 Java 필터를 작성하고 web.xml
에 등록할 수 있습니다.
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;
public class SameSiteFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
chain.doFilter(request, response);
if (response instanceof HttpServletResponse) {
HttpServletResponse httpServletResponse = (HttpServletResponse) response;
Collection<String> headers = httpServletResponse.getHeaders("Set-Cookie");
for (String header : headers) {
httpServletResponse.setHeader("Set-Cookie", header + "; SameSite=Lax");
}
}
}
}
그리고 web.xml
파일에 필터를 등록합니다.
<filter>
<filter-name>sameSiteFilter</filter-name>
<filter-class>com.example.SameSiteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>sameSiteFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
4. Nginx에서 SameSite 설정 방법
Nginx에서는 SameSite 속성을 설정하기 위해 proxy_cookie_path
지시어를 사용하여 특정 쿠키 경로에 SameSite를 추가합니다.
# Nginx 설정 파일 (예: nginx.conf)
# SameSite=Lax 설정 예시
proxy_cookie_path / "/; SameSite=Lax";
# SameSite=Strict 설정 예시
proxy_cookie_path / "/; SameSite=Strict";
# SameSite=None 설정 예시 (HTTPS만 가능)
proxy_cookie_path / "/; Secure; SameSite=None";
이러한 설정을 통해 Apache, Apache Tomcat, Nginx에서 쿠키에 SameSite 속성을 추가해 보안을 강화할 수 있습니다.
반응형
'보안 > Web' 카테고리의 다른 글
[ 보안 ] Content-Security-Policy - 보안 설정하기 (0) | 2024.11.11 |
---|