Computer Science/Database
CS - Database - SQL Injection
besforyou999
2022. 10. 7. 20:34
SQL Injection
해커에 의해 조작된 SQL 쿼리문이 데이터베이스에 그대로 전달되어 비정상적 명령을 실행시키는 공격 기법
공격 방법
1) 인증 우회
보통 로그인을 할 때, 아이디와 비밀번호를 Input창에 입력하게 되는데, 비밀번호를 입력함과 동시에 다른 쿼리문을 함께 입력하는 것.
보안이 완벽하지 않은 경우, 같이 입력(주입)된 쿼리문이 데이터베이스에 영향을 줄 수도 있다.
2) 데이터 노출
시스템에서 발생하는 에러 메시지를 이용해 공격하는 방법.
보통 에러는 개발자가 버그를 수정하는 면에서 도움을 받을 수 있는 존재.
해커들은 이를 역이용해 악의적인 구문을 삽입하여 에러를 유발시킨다.
방어 방법
1) input 값을 받을 때, 특수문자 여부 검사하기
로그인 전, 검증 로직을 추가하여 미리 설정한 특수문자들이 들어왔을 때 요청을 막아낸다.
2) SQL 서버 오류 발생 시, 해당하는 에러 메시지 감추기
view를 활용하여 원본 데이터베이스 테이블에는 접근 권한을 높인다. 일반 사용자는 view로만 접근하여 에러를 볼 수 없도록 만든다.
3) prepare statement 사용하기
prepare statement를 사용하면 특수문자를 자동으로 escaping 해준다. (statement와는 다르게 쿼리문에서 전달인자 값을 ?로받는 것) 이를 활용해 서버 측에서 필터일 과정을 통해서 공격을 방어한다.