[스프링, Spring] spring security 적용 후 Refused to display in a frame because it set 'X-Frame-Options' to 'DENY' 발생
spring security 적용 후 Refused to display in a frame because it set 'X-Frame-Options' to 'DENY' 발생
spring 프로젝트에 naver smarteditor2를 적용하려고 하니 Refused to display "http://localhost:8080/~" in a frame because it set 'X-Frame-Options' to 'DENY'라는 오류가 발생해 제대로 적용되지 않았다. 이유를 찾아보니 spring security를 적용하면 기본적으로 X-Frame-Options Click jacking 공격 막기 설정이 되어있기 때문이었다.
X-Frame-Options 종류로는 아래 3가지가 있는데 이번 오류는 SAMEORIGIN 옵션을 사용해서 해결할 것이다.
- DENY : 해당 페이지는 frame을 표시할 수 없음
- SAMEORIGIN : 해당 페이지와 동일한 orgin에 해당하는 frame만 표시할 수 있음
- ALLOW-FROM uri : 해당 페이지는 지정된 orgin에 해당하는 frame만 표시할 수 있음
따라서 이와 관련된 설정을 해주어야 한다. spring security관련해서 설정한 xml 파일에서 <http auto-config='true' use-expressions="true"> 태그 밑에 표시한 부분을 추가해주면 된다.
<http auto-config='true' use-expressions="true">
<!-- 여기부터 -->
<headers>
<frame-options policy="SAMEORIGIN"/>
</headers>
<!-- 여기까지 추가-->
....
</http>
만일 Spring Boot를 사용한다면 xml 파일이 아닌 이와 관련된 Java파일로 설정을 할 것이다. 이 경우에는 아래와 같이 하면 되는 것 같은데 정확히 실행해보지 않았지만 핵심은 http.headers().frameOptions().sameOrigin()을 사용하는 것 같다.
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
// ...
.headers()
.frameOptions().sameOrigin();
}
}
https://docs.spring.io/spring-security/site/docs/5.0.x/reference/html/headers.html
https://gigas-blog.tistory.com/124
https://goni9071.tistory.com/360
https://yangbongsoo.tistory.com/10