웹 주요 취약점에 대해 배울 때마다 정리해두기!!!!
- SQL 삽입
- ' OR ''='
- select * from users where userid = '' OR ''='' and userpwd = '' OR ''='' 로 만능 로그인
- Java Servlet : Statement 대신 PreparedStatement로 해결
- Spring Framework에는 이러한 취약점 X
- ' OR ''='
Cross-Site Scripting이란, 공격자가 작성한 스크립트가 다른 사용자에게 전달되는 것
- SQL 취약점을 통해 스크립트를 DB에 넣으면 스크립트가 실행된다.
- 입력칸에,
<script>$(document).ready(function(){a();});function a() {$.post('board/write', {writer:'a', title: 'a', content: 'a'}, function(){a();});}</script>
와 같은 코드를 작성하면 공격 가능
- 입력칸에,
- 메일에 링크 심기
사용자 의지와는 상관없이 해커가 의도한 행위(등록, 수정, 삭제 등)를 사용자 권한을 이용해 서버에 요청을 보내는 공격 인증, 권한 체크도 방어가 가능하지 않는다. 재인증으로 이를 해결할 수 있다.
- 비번 재입력
- 이메일 입력
- 생체인식
- 인증서 확인
- OTP
- 전화인증
- CSRF token
- alert
Interceptor와 CSRF token 발행 interceptor로 로그인 없이 글을 못 남기도록 설정 (특정 경로로 접근하기 전에 인터셉터가 가로챔)
// CSRF token 발행
public class BoardController {
@GetMapping("/write")
public String write(HttpSession session) {
String csrfToken=UUID.randomUUID().toString();
session.setAttribute("CSRF_TOKEN", csrfToken);
return "boardWrite";
}
}
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" />
- Cookie는 탈취 가능
- HttpSession의 경우 tomcat이 다루기 때문에 보안 Cookie로 되어 있어 탈취 불가능.
- 개발자가 직접 Cookie를 설정할 경우 탈취 가능