소프트웨어 보안약점 진단원/1. 입력데이터 검증 및 표현

1.1 DBMS 조회 및 결과 검증

kwj0330 2026. 5. 21. 12:39
반응형

DBMS 조회시 질의문(SQL) 내 입력값과 그 조회결과에 대한 유효성 검증방법(필터링 등) 설계 및 유효하지 않은 값에 대한 처리방법을 설계해야 한다.

 

[취약점]

1. SQL 삽입 공격

[보안대책]

1. 최소권한의 계정
2. 정적 SQL 질의문(*ORM프레임 워크) 사용

 * ORM(Object-Relational Mapping, 객체 관계형 매핑)은 쉽게 말해 "개발자가 SQL 문을 직접 쓰지 않고, 자바나 파이썬 같은 프로그래밍 언어의 '객체(Object)'로 데이터베이스를 다룰 수 있게 도와주는 도구(프레임워크)    

 

3. 동적 SQL 질의문 사용 시 입력값 검증

필터 ② 인터셉트 ③ 라이브러리 또는 Validator 컴포넌트

 

① 필터 (Filter) : 공항의 '최외곽 출입문 검색대'

필터는 사용자의 요청이 웹 애플리케이션(WAS)의 문턱을 넘자마자 가장 먼저 만나는 곳입니다.

  • 비유: 공항 건물에 들어올 때 문 앞에서 위험한 물건(칼, 폭발물 등)이 있는지 전체적으로 한 번 쓱 검사하는 검색대입니다.
  • 동작 원리: 아직 개발자가 짠 실제 비즈니스 코드(컨트롤러/서블릿)에 도달하기 전입니다. 들어오는 요청의 '텍스트 전체'를 훑어볼 수 있습니다.
  • 어떻게 검증하나?
    • 사용자가 입력한 값에 SELECT, UNION, OR 1=1, -- 같은 SQL 인젝션 의심 키워드가 포함되어 있는지 통째로 문자열을 검사(필터링)합니다.
    • 만약 위험한 글자가 있으면 내부 코드로 넘겨주지도 않고 그 자리에서 요청을 튕겨내거나, 특수문자를 안전한 문자로 치환(' -> '')해 버립니다.

② 인터셉터 (Interceptor) : 면세구역 진입 전 '티켓/신분증 검사대'

인터셉터는 필터를 통과한 후, "특정 목적지(컨트롤러/기능)"로 가기 직전에 낚아채서(Intercept) 검사하는 곳입니다. 스프링(Spring) 같은 프레임워크 기술 안에서 동작합니다.

  • 비유: 공항 안에는 들어왔지만, 면세구역이나 비행기 탑승 게이트로 들어가기 전에 "너 비행기 티켓 있어? 신분증 일치해?" 하고 한 번 더 꼼꼼하게 검사하는 곳입니다.
  • 동작 원리: 웹 애플리케이션 안쪽까지 들어왔기 때문에, 사용자가 요청한 '특정 기능(예: 회원 조회, 상품 검색)'이 무엇인지 명확히 아는 상태에서 검사합니다.
  • 어떻게 검증하나?
    • "어? 이 사용자가 지금 '조회' 기능을 요청했네? 그럼 이 요청에 묻어온 검색어 파라미터에 SQL 인젝션 공격 패턴이 있는지 검사해야겠다!" 하고 기능별로 타겟을 정해서 정교하게 검증할 수 있습니다.
    • 로그인 여부나 권한 체크를 하면서 동시에 입력값을 검증할 때 많이 씁니다.

③ 라이브러리 또는 Validator 컴포넌트 : 세부 심사를 하는 '전문 심사관'

이 방식은 앞의 두 개처럼 들어오는 길목을 지키는 게 아니라, 개발자가 코드 속에 직접 배치해 둔 '전문 검증 도구(모듈)'입니다.

  • 비유: 의심스러운 승객을 따로 조사실로 불러서, 전문 심사관이 "너 나이가 몇 살이야? 직업이 뭐야? 서류 양식에 맞게 썼어?" 하고 서류 항목 하나하나를 꼼꼼하게 대조하는 것입니다.
  • 동작 원리: 개발자가 검증용 라이브러리(예: Java의 Hibernate Validator, OWASP ESAPI 등)를 가져와서, "이 데이터는 숫자만 들어와야 해", "이 데이터는 영문자 10자리여야 해" 하고 규칙을 정해두고 검증하는 방식입니다.
  • 어떻게 검증하나?
    • 화이트리스트(Whitelist) 방식 검증에 최적화되어 있습니다. 위험한 걸 막는 게 아니라, "내가 허용한 정상적인 형태의 데이터"가 아니면 무조건 에러를 냅니다.
    • 예를 들어, 동적 SQL에 들어갈 '정렬 기준(상태값)' 파라미터라면 Validator를 통해 ID, DATE, NAME이라는 3가지 글자 외에는 절대 못 들어오게 꽉 막아버리는 식입니다.

  • 필터: 가장 앞단에서 웹 요청 전체를 대상으로 일괄적인 문자열 필터링을 할 때 씀.
  • 인터셉터: 스프링 등 프레임워크 환경에서 특정 기능(URL)으로 가기 직전에 낚아채서 검증할 때 씀.
  • Validator 컴포넌트: 코드 내부에서 데이터의 타입, 길이, 허용된 값의 범위(화이트리스트)를 아주 정밀하게 검증할 때 씀.

 

반응형