APPLICATION SECURITY

SQL Injection 성립

SQL Injection은 사용자 입력이 단순 데이터가 아니라 쿼리의 일부처럼 처리될 때 발생합니다. 핵심 방어는 SQL 문장 구조와 외부 입력값을 명확히 분리하는 것입니다.

취약 패턴 입력값을 문자열로 이어 붙여 쿼리를 만든다.
방어 패턴 Prepared Statement로 SQL 구조와 값을 분리한다.
SQLi 성립 검산 허용된 형식, 권한, 오류 노출 범위를 함께 줄인다.
입력 신뢰

사용자 입력을 그대로 쿼리 생성에 사용하면 데이터와 명령의 경계가 무너집니다.

쿼리 변형

DB는 조작된 문자열을 정상 SQL처럼 해석할 수 있어 조회 조건과 실행 범위가 바뀝니다.

피해 확산

인증 우회, 정보 유출, 데이터 변조, 권한 상승처럼 DB 권한 범위만큼 피해가 커집니다.

구조 분리

Prepared Statement는 SQL 골격을 먼저 고정하고 입력값을 값으로만 바인딩합니다.

우선 적용할 방어

  • Prepared Statement와 파라미터 바인딩 사용
  • 입력값 형식과 길이를 허용 목록 기준으로 검증
  • DB 계정 권한을 기능에 필요한 범위로 제한

운영에서 확인할 신호

  • 반복된 오류 응답과 비정상적인 검색 조건
  • 로그인, 검색, 상세 조회처럼 DB 조건을 만드는 입력 지점
  • DB 오류 메시지와 내부 테이블 정보 노출 여부