본문 바로가기
IT 정보/용어

SQL Injection이란? - 웹과 DB 보안의 기본을 지키는 첫걸음

by 희품 2025. 6. 25.
반응형

SQL Injection이란? - 웹과 DB 보안의 기본을 지키는 첫걸음 섬네일 이미지

 

웹 애플리케이션을 개발하거나 운영해 본 사람이라면 'SQL Injection(SQL 인젝션)'이라는 단어를 반드시 들어봤을 것이다.

이는 보안상 가장 치명적이면서도, 동시에 가장 빈번하게 발생하는 공격 방식 중 하나다. 특히 데이터베이스를 다루는 웹사이트라면 누구든 이 위협에 노출될 수 있다.

 

SQL Injection 이란?

SQL을 주입하는 주사기 아이콘을 포함한 SQL Injection의 개념을 나타내는 이미지

SQL Injection은 사용자 입력값을 제대로 검증하지 않고 SQL 쿼리에 그대로 포함시킴으로써 악의적인 명령을 실행하게 만드는 공격 기법이다. 예를 들어, 로그인 폼이나 검색창 등에 삽입된 코드가 데이터베이스에 직접 영향을 줄 수 있는 상황에서 발생한다.

공격자는 입력값에 SQL 구문을 삽입함으로써 데이터베이스(DB) 자체를 조작하거나 확인할 수 있다.

 

어떤 내용을 확인할 수 있는지 살펴보자.

  • 사용자 정보 탈취: 모든 사용자 정보를 조회하거나 특정 계정의 비밀번호를 확인
  • 데이터 조작: 테이블의 데이터를 삭제, 수정, 삽입
  • 관리자 권한 획득: 인증 절차를 우회하여 관리자 계정으로 로그인
  • 파일 시스템 접근 시도: 일부 DBMS의 확장 기능을 악용하여 서버 파일에 접근

Injection은 주사를 맞는 것처럼, 주입한다는 의미인데, SQL 자체를 주입한다고 생각하면 이해하기 수월할 것이다.

 

SQL Injection의 예시

다음은 가장 기본적인 로그인 우회 예시이다.

-- 정상적인 쿼리 예시
SELECT * FROM users WHERE username = 'admin' AND password = '1234';

-- 악의적인 입력이 들어간 경우
입력값: username = admin' -- , password = (생략)

-- 실제 실행되는 쿼리
SELECT * FROM users WHERE username = 'admin' -- ' AND password = '';

--은 SQL에서 주석을 의미하므로, 이후 조건은 무시되고 로그인 검증을 우회하게 된다.

이로써, 비밀번호를 몰라도 admin(관리자) 계정으로 로그인할 수 있게 된다.

 

SQL Injection의 종류

SQL Injection은 기술적으로 다양한 방식으로 구분된다. 대표적인 유형을 살펴보자.

웹사이트 검색을 할 수 있는 에디터 박스를 나타냄. 검색 후 참 거짓을 판별하는 블라인드 SQLi나 결과를 확이하는 Classic SQLi를 떠올릴 수 있음.

  1. Classic SQLi (전통적 SQL 인젝션): 결과를 직접 확인할 수 있는 구조에서 공격
  2. Blind SQLi (블라인드 SQL 인젝션): 응답 결과는 없지만, 참/거짓 판단을 통해 우회적으로 정보를 얻음
  3. Error-based SQLi: 쿼리 실행 시 발생하는 에러 메시지를 통해 내부 정보를 유추함
  4. Time-based Blind SQLi: 조건이 참일 경우 일정 시간 지연시키는 방식으로 논리적 판단 수행

앞서 소개했던 기본적은 로그인 우회 SQL Injection 예시에서는 값을 직접 확인하는 것이 아니라, 비밀번호 일치 여부를 참/거짓으로 판단하기 때문에 블라인드 SQL Injection이라고 보면 된다.

 

SQL Injection을 예방하는 방법

SQL Injection은 비교적 단순한 공격이지만, 그 피해는 심각할 수 있다.

간단하게 막을 수 있는 기본적인 공격이지만, 이러한 기본 보안을 놓친다면 막대한 피해로 돌아올 수 있는 것이다.

어떤 방어 전략을 준수해야 하는지 살펴보자.

비즈니스 계획, 감사 및 재무 연구, 회계 보고서, 재무제표, 보고서 작성 재무 보고 개념, 디지털 회계. prepared Statement를 나타냄

  • Prepared Statement 사용: 파라미터를 별도로 처리하여 SQL과 데이터를 분리
  • ORM 사용 권장: SQL 쿼리를 직접 다루는 대신 ORM(Object-Relational Mapping)을 통해 구조화된 접근
  • 입력값 검증: 사용자 입력값에 대해 화이트리스트 기반 필터링 또는 정규표현식 검증 적용
  • DB 권한 최소화: DB 연결 계정의 권한을 최소한으로 제한해 피해 확산 방지
  • 에러 메시지 노출 방지: 서버에서 발생한 DB 에러는 사용자에게 노출되지 않도록 처리

 

컴퓨터 화면의 개방형 웹 응용 프로그램 보안 프로젝트 개념인 owasp

SQL Injection은 수년이 지나도 여전히 OWASP(The Open Worldwide Application Security Project), 웹 애플리케이션 보안에 대한 국제적인 개방형 커뮤니티의 Top 10에 포함되는 고위험 보안 이슈다.

 

보안은 개발의 선택이 아닌 필수 요소이며, 기본적인 방어 원칙을 잘 지키는 것만으로도 대부분의 위협을 효과적으로 차단할 수 있다. 웹 서비스를 운영하거나 개발하고 있다면, 지금 당장 코드 속 SQL 처리 방식을 점검해 보자.

 

#SQLInjection #웹보안 #데이터베이스보안 #보안취약점 #OWASP #웹개발팁 #PreparedStatement #ORM보안 #개발자보안 #SQL인젝션

반응형