해커에 의해 조작된 SQL 쿼리문이 데이터베이스에 그대로 전달되어 비정상적 명령을 실행시키는 공격기법
데이터베이스에 손실을 줄 수 있는 코드 침투 기술
- 악성코드 유저에 의해 애플리케이션 웹서버를 조작한다.
- 클라이언트가 입력한 데이터를 제대로 필터링하지 못할 때 발생
공격유형
- 데이터 업데이트, 삭제, 삽입 : 공격은 쿠키를 수정하여 웹 애플리케이션 데이터베이스 쿼리를 포이즈닝하는 것이다.
- 트로이목마와 같은 악성코드 프로그램을 다운로드하고 설치하는 명령어를 서버에 실행시킨다.
- 카드 세부내용, 비밀번호 등 귀중한 데이터를 해커의 리모트 서버에 노출시킨다.
- 유저 로그인 : 가장 기본적인 SQL Injection이다. 웹 애플리케이션은 폼을 통해 유저의 정보를 입력받고 프론트엔드는 처리하기 위해 백엔드 데이터베이스에 전달한다.
방어방법
1) input 값을 받을 때, 특수문자 여부 검사하기
- 로그인 전, 검증 로직을 추가하여 미리 설정한 특수문자들이 들어왔을 때 요청을 막아낸다.
2) SQL 서버 오류 발생 시, 해당하는 에러 메시지 감추기
- view를 활용하여 원본 데이터베이스 테이블에는 접근 권한을 높인다. 일반 사용자는 view로만 접근하여 에러를 볼 수 없도록 만든다.
3) preparestatement 사용하기
- preparestatement를 사용하면, 특수문자를 자동으로 escaping 해준다. (statement와는 다르게 쿼리문에서 전달인자 값을 ?로 받는 것) 이를 활용해 서버 측에서 필터링 과정을 통해서 공격을 방어한다.
출처
https://www.javatpoint.com/sql-injection
https://velog.io/@yanghl98/Database-SQL-Injection
https://www.w3schools.com/sql/sql_injection.asp