반응형
http에서 https로 변경했다고 해서 모든 보안문제가 해결된 것은 아닙니다. 클라이언트와 서버가 데이터를 주고 받을 때 암호화가 적용되어 내용을 보호할 수 있지만, Session 탈취문제를 완벽하게 보호하지 못합니다. 그래서 조금이나마 보안을 강화하기 위한 설정들을 해보았습니다.
1. HTTP에서 HTTPS로 리다이렉트 처리
<http use-expressions="false">
...
<session-management>
<concurrency-control expired-url="/login.do" />
</session-management>
<port-mappings>
<port-mapping http="8080" https="8443"/> <!-- (1) -->
</port-mappings>
...
<intercept-url pattern="/resources/**" access="ROLE_USER" requires-channel="https"/> <!-- (3) -->
<intercept-url pattern="/**" access="ROLE_USER" requires-channel="https"/> <!-- (2) -->
</http>
위 코드는 Spring Security의 Security-context.xml에 설정한 일부 코드입니다. Security를 이용하여 https연결설정을 해볼까요?
- 서버의 설정파일인 server.xml에서 Connector 설정을 확인하시거나, 어플리케이션에서 정의한 포트번호를 확인하여, http포트와 https포트를 지정해줍니다.
- requires-channel을 https로 설정하여, https로만 연결될 수 있도록 설정합니다. 이렇게 해두시면 http로 접속했을 때 자동으로 https로 연결됩니다.
- 만약에 정적 자원은 http로 연결되어도 상관없으시면 설정된 경로를, http로 설정하셔도 됩니다.
2. 추가적인 보안 설정
Session 보안설정
## web.xml
<session-config>
<cookie-config>
<http-only>true</http-only>
<secure>true</secure>
</cookie-config>
<session-timeout>60</session-timeout> <!--단위 분-->
</session-config>
web.xml에 위와 같은 설정을 해줍니다.
- httpOnly옵션은 javascript에서는 cookie를 탈취하지 못하도록 설정한 것입니다. 이는 XSS공격에 의해서 세션아이디 값이 노출되는 것을 방지합니다.
- secure를 true로 설정해주어, https에서만 sessionID값이 전달되도록 하여, 암호화되지 않은 SessionID가 전송되는것을 방지합니다.
- session-timeout을 설정하여, session이 해당 시간동안만 유지될 수 있도록 설정합니다. 예시는 60분으로 설정한 것입니다.
위와같은 설정만 해주셔도 SessionID 탈취에 대한 보안 위협은 상당히 줄어들 것입니다.
반응형
'개발관련 > Spring' 카테고리의 다른 글
Spring에 의해 관리되지 않는 객체, Property 값 주입하기 (0) | 2021.03.29 |
---|---|
java 개발을 더 간편하게 / lombok (0) | 2020.07.08 |
spring boot(스프링 부트) - 프로젝트 구조 및 사용 방법 (0) | 2020.06.18 |
alert문구를 하나의 파일로 만들어서 관리하자. springframework.org/tags (0) | 2020.02.26 |
[spring] 파일다운로드 구현 (3) | 2020.02.02 |
댓글