JS 보안 취약점

hyun·2023년 1월 8일
0

XSS

정의

어플리케이션에 해커가 악성 코드를 주입하는 것으로 크로스 사이트 스크립팅의 약자이다. 주로 여러 사용자가 보는 게시판에 글에 악성 코드를 포함하여 올리는 형태로 이루어진다. 악성 코드를 사용하여 사용자 정보인 쿠키, 세션을 탈취하거나 자동적으로 비정상적인 기능을 수행하게 한다.

방어하기

  1. 입력값 제한 : 사용자가 입력한 값을 제한하여 스크립트릴 입력하지 못하도록 해야 함
  2. 입력값 치환 : XSS는 기본적으로 script 태그를 이용하므로 <, >를 <, > 등으로 대체해야 한다.
  3. 스크립트 영역에 출력 자제 : 이벤트 핸들러 영역에 스크립트가 삽입되는 경우 보호 기법을 우회할 수 있기 때문에 사용자 입력 출력을 최대한 자제한다.



CSRF

정의

크로스 사이트 위조 요청은 사용자의 세션 쿠키를 브라우저 세션으로 가장하여 도용하는 것을 말한다. 사용자를 속여 악성 코드를 실행하거나 웹 사이트, 어플리케이션에 대해 허가되지 않은 행동을 할 수 있따.

방어

웹 사이트의 모든 form 양식에 csrf 토큰을 추가해야 합니다

spring security로 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 함수 사용

정의

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

profile
크리스마스 캐럴을 좋아하는 사람!

0개의 댓글