일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- BFS
- java
- 다이나믹 프로그래밍
- 프로그래머스
- vscode
- 자바
- Javascript
- LeetCode
- VIM
- 알고리즘
- network
- Graph
- 리트코드
- DP
- frontend
- Python
- CS
- DFS
- 그레이들
- Redux
- react
- 안드로이드
- git
- 백준
- TypeScript
- 동적 계획법
- db
- Algorithm
- Database
- Data Structure
Archives
- Today
- Total
늘 겸손하게
CS - Database - SQL Injection 본문
SQL Injection
해커에 의해 조작된 SQL 쿼리문이 데이터베이스에 그대로 전달되어 비정상적 명령을 실행시키는 공격 기법
공격 방법
1) 인증 우회
보통 로그인을 할 때, 아이디와 비밀번호를 Input창에 입력하게 되는데, 비밀번호를 입력함과 동시에 다른 쿼리문을 함께 입력하는 것.
보안이 완벽하지 않은 경우, 같이 입력(주입)된 쿼리문이 데이터베이스에 영향을 줄 수도 있다.
2) 데이터 노출
시스템에서 발생하는 에러 메시지를 이용해 공격하는 방법.
보통 에러는 개발자가 버그를 수정하는 면에서 도움을 받을 수 있는 존재.
해커들은 이를 역이용해 악의적인 구문을 삽입하여 에러를 유발시킨다.
방어 방법
1) input 값을 받을 때, 특수문자 여부 검사하기
로그인 전, 검증 로직을 추가하여 미리 설정한 특수문자들이 들어왔을 때 요청을 막아낸다.
2) SQL 서버 오류 발생 시, 해당하는 에러 메시지 감추기
view를 활용하여 원본 데이터베이스 테이블에는 접근 권한을 높인다. 일반 사용자는 view로만 접근하여 에러를 볼 수 없도록 만든다.
3) prepare statement 사용하기
prepare statement를 사용하면 특수문자를 자동으로 escaping 해준다. (statement와는 다르게 쿼리문에서 전달인자 값을 ?로받는 것) 이를 활용해 서버 측에서 필터일 과정을 통해서 공격을 방어한다.
'Computer Science > Database' 카테고리의 다른 글
CS - Database - Anomaly (0) | 2022.10.10 |
---|---|
CS - Database - 정규화 (Normalization) (0) | 2022.10.10 |
CS - Database - SQL과 NOSQL의 차이 (0) | 2022.10.08 |
CS - Database - SQL JOIN (0) | 2022.10.07 |
CS - Database - Key (0) | 2022.10.07 |