어플리케이션에 해커가 악성 코드를 주입하는 것으로 크로스 사이트 스크립팅의 약자이다. 주로 여러 사용자가 보는 게시판에 글에 악성 코드를 포함하여 올리는 형태로 이루어진다. 악성 코드를 사용하여 사용자 정보인 쿠키, 세션을 탈취하거나 자동적으로 비정상적인 기능을 수행하게 한다.
크로스 사이트 위조 요청은 사용자의 세션 쿠키를 브라우저 세션으로 가장하여 도용하는 것을 말한다. 사용자를 속여 악성 코드를 실행하거나 웹 사이트, 어플리케이션에 대해 허가되지 않은 행동을 할 수 있따.
웹 사이트의 모든 form 양식에 csrf 토큰을 추가해야 합니다
spring security bean 내 configure 함수에 csrf 설정 코드를 아래와 같이 추가한다.
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.headers()
...
...
.and()
//추가 부분 시작
.csrf()
.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
// 추가 부분 끝
.and();
}
...
...
}
아래코드를 form에 추가한다.
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
eval() 함수는 대부분 개발자가 텍스트를 코드의 한 조각으로 실행시키기 위해서 사용되며, 그 자체로 나쁜 코딩 관행이라고 할 수 있습니다. 이것은 JavaScript 애플리케이션을 공격에 노출시켜 보안 위험을 증가시킬 수 있습니다. 따라서 되도록이면 이 함수를 사용하지 말고 보다 더 안전한 기능으로 교체해야 합니다.
https://www.appsealing.com/kr/javascript-security-guide
http://blog.plura.io/?p=7614
https://determination.tistory.com/entry/스프링-시큐리티Spring-Security-CSRF-설정AJAX-POST-FORM