SQL INJECTION |
SQL Injection 이란,
- SQL Injection 은 웹 애플리케이션에서 데이터의 유효성 검증을 하지 않아, 개발자가 의도하지 않은 동적 쿼리(Dynamic Query)를 생성하여 조작된 SQL문으로 DB 정보를 열람하거나 변경할 수 있는 보안 취약점입니다.
- 예시
- SELECT * FROM userInfo Where userID = '${userID}' and userPW = '${userPW}' 라는 쿼리가 있다
- 정보를 빼내려는 유저가 pw' or 1=1 limit 1-- 를 비밀번호로 입력하면
- 쿼리가 SELECT * FROM userInfo Where userID = 'admin' and userPW = 'pw' or 1=1 limit 1--' 이며
- 잘못된 결과가 실행된다
- 마지막에 '는 주석 처리되며, 1=1이 absolutely true로 만들어 주기 때문이다.
- 홈페이지 쿼리에 따라 SQL Injection으로 충분히 해킹될 가능성이 있다!!
Spring framework에서 mybatis를 사용하고 있을 경우 방어하기!
- Mybatis에서는 #{} 또는 ${} 두 가지 형식으로 파라미터를 받는다.
- #{} : 내부적으로 PreparedStatement를 사용하기 때문에 sql injection 공격에 안전하다. 쿼리와 입력값 분리한다 (문자열 형태로 들어와서 파라미터 형태가 됨)
- ( PreparedStatement : 값을 바인딩하는 시점에서 전달된 특수문자 쿼리 등을 필터링하여 sql injection을 막는다.)
- ${} : 파라미터가 바로 출력된다 > SQL Injection 공격에 취약
>>> ${} 대신 #{}로 파라미터를 받는 것이 안전!
참고 사이트
https://sas-study.tistory.com/96
'WEB > DB' 카테고리의 다른 글
MariaDB 설치 + workbench 연결 for MAC (0) | 2022.03.26 |
---|---|
Mysql 서버 타임존 변경하기 (4) | 2021.02.16 |