Security Engineer · SQL Injection

입력값에서 SQL 실행까지 오염 추적 지도

사용자 입력이 문자열 결합을 거쳐 SQL 문법으로 해석되는 지점과 Prepared Statement가 데이터와 명령을 분리하는 지점을 단계별로 보여준다.

01

입력 수집

로그인 ID, 검색어, 정렬 파라미터 같은 외부 입력이 서버로 들어온다.

source
02

문자열 결합

입력값을 SQL 문자열에 직접 붙이면 따옴표와 주석이 문법으로 해석될 수 있다.

taint
03

DB 실행

DBMS는 공격자가 넣은 조건식을 원래 쿼리 일부처럼 처리한다.

execute
04

방어 지점

바인딩, 허용목록 검증, 권한 제한으로 명령과 데이터를 분리한다.

control
값 입력
Prepared Statement 값은 placeholder에 바인딩되어 SQL 문법으로 재해석되지 않는다.
1순위
컬럼·정렬
허용목록 검증 바인딩이 어려운 식별자는 서버가 정한 목록에서만 선택한다.
동적 SQL
피해 제한
DB 최소권한 취약점이 뚫려도 DROP, 권한 변경, 전체 조회 피해를 줄인다.
blast radius

점검 질문

입력 경로 숨은 파라미터와 쿠키도 SQL에 닿는지 본다.
오류 노출 DB 오류 메시지가 테이블명과 쿼리 구조를 드러내는지 확인한다.
로그 근거 따옴표, 주석, union, sleep 패턴을 요청 로그와 함께 본다.