개요
SQL Injection은 사용자 입력이 SQL 쿼리의 일부로 안전하지 않게 결합될 때 발생한다. 공격자는 조건식, 서브쿼리, UNION 구문 등을 삽입해 인증 우회, 데이터 조회, 데이터 변조를 시도할 수 있다.
주요 유형
Error-based SQL Injection
데이터베이스 오류 메시지를 통해 쿼리 구조나 테이블 정보를 추론한다.
Union-based SQL Injection
UNION SELECT를 이용해 원래 응답에 공격자가 지정한 조회 결과를 합친다.
Blind SQL Injection
응답에 직접 데이터가 노출되지 않더라도 참/거짓 조건, 시간 지연, 응답 차이를 이용해 값을 추론한다.
영향
- 인증 우회
- 민감 데이터 조회
- 데이터 변조 또는 삭제
- 데이터베이스 계정 권한에 따른 추가 침투
방어
Prepared statement와 parameterized query를 기본으로 사용하고, ORM을 쓰더라도 raw query 경계를 별도로 점검한다. 입력 검증은 보조 수단이며, 쿼리 조립 자체를 안전하게 만드는 것이 우선이다.