반응형
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에 대비할 수 있다.
반응형
'프로그래밍 > 시큐어코딩' 카테고리의 다른 글
[시큐어 코딩] #9 정수 오버플로우 (0) | 2020.07.02 |
---|---|
[시큐어 코딩] #8 HTTP 응답 분할 / CRLF (0) | 2020.07.02 |
[시큐어 코딩] #6 신뢰되지 않는 URL 주소로 자동 연결 (0) | 2020.07.02 |
[시큐어 코딩] #5 위험한 형식 파일 업로드 (0) | 2020.07.02 |
[JAVA] Enum이란? (0) | 2020.07.02 |