[시큐어 코딩] #7 크로스사이트 요청 위조 / CSRF :: 잡다한 프로그래밍
반응형

1. CSRF의 정의

특정 웹 사이트에 대해 사용자가 인지하지 못한 상황에서 사용자의 의도와 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등) 을 요청하게 하는 공격을 말한다. 사용자로부터 받은 요청에 대해 사용자가 의도한대로 작성되고 전송된 것인지 확인하지 않을때 발생하며, 관리자인경우 관리자 권한의 게시물삭제 사용자 관리 등 임의로 공격이 가능하다

 

2. 안전한 코딩기법

입력화면 form 작성 시 Get 방식을 사용하면 URL에 노출이 되므로 POST방식을 사용하여 해당 입력을 처리하도록한다.

 

3. 예시

 

4. 추가적인 방법

CSRF Token이용하기

CSRF 토큰을 주고받으므로서 요청이 유효한지 확인할 수 있다. 예를들어 게시판 글 쓰기 페이지를 호출할 때 token을 서버에서 브라우저에게 전달하고, 게시판 글쓰기 요청이 왔을 때 토큰이 없다면 유효한 요청이 아니라고 판단하는 것 이다.

이는 Spring security를 사용하면 csrf토큰 내용이 구현되어있다. 유저 form에서 다음과 같이 csrf input을 추가해주면 된다.

<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/> 

 

CAPTCHA

다음과 같이 추가적인 인증을 하는 CAPTCHA를 이용하여 CSRF에 대비할 수 있다.

 

추가로 비밀번호 요구하기

예를들어 사용자의 회원탈퇴, 정보수정같은 중요한 업무는 비밀번호를 한번 더 요청하는것으로 CSRF에 대비할 수 있다.

반응형

+ Recent posts