반응형
CSRF(Cross Site Request Foregery)
사이트 간 요청 위조
웹 애플리케이션 취약점 중 하나로 사용자가 자신의 의지와 무관하게 공격자가 의도한 행동을 해서 특정 웹페이지를 보안에 취약하게 한다거나 수정, 삭제 등의 작업을 하게 만드는 공격 방법이다. 2008년에 발생한 옥션의 개인정보 유출 사건에서도 관리자 계정을 탈취하는 데 이 방법이 사용되었다. 공격의 난이도가 높지 않아 흔히 사용된다.
공격 방법중 하나로
url 패턴을 http://test.com/user.do?usrId=admin&new_password=1234 로 작성하여 희생자들에게 메일을 발송해 비밀번호가 1234로 변경되도록 하거나 url로 희생자들의 개인정보만가져와 희생자들의 정보로 광고글을 작성하는 등이 있다.
방어 방법으로
CSRF TOKEN을 사용해 보았는데
전자정부 filter를 추가하고 url-patten을 .do로 잡아두었다.
if(session.getAttribute("csrftoken") == null) {
session.setAttribute("csrftoken", UUID.randomUUID().toString());
chain.doFilter(request, response);
} else {
if(httpRequest.getMethod().equals("POST")) {
String realToken = StringUtil.noNull(session.getAttribute("csrftoken"));
String clientToken = StringUtil.noNull(httpRequest.getParameter("csrf"));
if(clientToken.equals(realToken)) {
LOGGER.info("CSRF Token is checked");
chain.doFilter(request, response);
}else{
LOGGER.error("CSRF Token is not correct");
throw new IllegalStateException("Incorrect CSRF Token");
}
}else{
chain.doFilter(request, response);
}
}
처음 접근했을때 csrftoken을 생성하고 세션에 담아두고
post 방식으로 들어오는 것들에 csrftoken이 있는지를 확인하여 변조된것이 있는지 확인하는 내용이다.
( 필터에서 csrftoken을 생성하지말고 로그인 필터쪽 로그인했을경우 생성하는 방식으로 변경 예정이다.)
form 태그 post에 로그인시 저장한 csrftoken을 담아서 보내준다.
이렇게 할 경우 메일에 url을 변조하여 희생자의 정보를 변경하는 url이 들어왔을때 csrftoken값이 일치하지 않기에 에러가 발생하게 된다.
반응형
'개발노트' 카테고리의 다른 글
리눅스 톰캣, 방화벽 에러 (0) | 2023.01.26 |
---|---|
[ssl] SSL 인증서 갱신하기 (한국전자인증) (0) | 2022.12.13 |
[jQuery] 유튜브 iframe 동적 생성 (0) | 2022.11.25 |
[Ubuntu] 스프링으로 리눅스서버 메일전송 (0) | 2022.10.31 |
리눅스 CRONTAB 설정 (0) | 2022.10.18 |