데이터베이스

SQL 인젝션에 대해 간단히 알아보겠습니다.

forward error correction Circle 2024. 7. 3. 08:25
반응형

Ⅰ. SQL 인젝션이란?
SQL 인젝션(SQL Injection)은 공격자가 응용 프로그램의 데이터베이스 쿼리에 악의적인 SQL 코드를 삽입하여, 원래 의도된 쿼리의 동작을 변경하거나 불법적으로 데이터에 접근하는 공격 기법입니다. 이를 통해 공격자는 데이터베이스의 데이터 유출, 수정, 삭제 또는 관리자 권한 획득 등의 부정행위를 할 수 있습니다.

Ⅱ. SQL 인젝션의 종류와 특징

  Union-based 
SQL Injection
Error-based SQL Injection Blind SQL Injection Boolean-based Blind SQL Injection Time-based Blind SQL Injection
특징 UNION SQL 연산자를 사용하여 하나 이상의 쿼리 결과를 결합합니다. 의도적으로 오류를 유발하여 데이터베이스의 오류 메시지를 이용해 정보 유출. 오류 메시지를 통해 정보를 얻을 수 없을 때, 참/거짓 쿼리를 사용하여 정보를 추출. 참 또는 거짓 조건에 따라 웹 페이지의 응답이 달라지는 것을 통해 정보를 추출. 쿼리 실행 지연을 통해 참/거짓 여부를 판단하여 정보를 추출.
대응방법 입력 값의 유효성 검증과 함께 미리 준비된 문(Prepared Statement)을 사용합니다. 오류 메시지를 사용자에게 직접 노출하지 않도록 설정하고, 쿼리 작성 시 예외 처리를 철저히 합니다. 모든 입력 데이터를 검증하고, 쿼리 실행 전에 미리 준비된 문을 사용합니다. 입력 값의 검증과 준비된 문을 사용하여 쿼리의 안전성을 확보합니다. 쿼리 실행 시간을 기반으로 한 정보를 제공하지 않도록 하고, 준비된 문을 사용합니다.

 

Ⅲ. SQL 인젝션 대응 방법
 ⅰ) 입력 값 검증 및 필터링
 모든 사용자 입력을 검증하여 허용되지 않은 문자가 포함되지 않도록 합니다.
 화이트리스트를 사용하여 안전한 입력 값만 허용합니다.
 ⅱ) 미리 준비된 문(Prepared Statement) 사용
 쿼리를 컴파일하고 입력 값은 별도로 전달하여 쿼리와 데이터가 분리되도록 합니다.
플레이스홀더를 사용하여 동적 쿼리를 안전하게 처리합니다.
 ⅲ) ORM(Object-Relational Mapping) 사용
ORM 프레임워크를 사용하여 SQL 쿼리 생성을 자동화하고, SQL 인젝션 위험을 줄입니다.
 ⅳ) 보안 프레임워크 및 라이브러리 사용
 웹 애플리케이션 보안 프레임워크 및 라이브러리를 사용하여 입력 값 검증과 SQL 쿼리 생성을 안전하게 처리합니다.
ⅴ) 최소 권한 원칙
 데이터베이스 사용자의 권한을 최소한으로 설정하여 SQL 인젝션 발생 시 피해를 최소화합니다.
특정 작업에 필요한 권한만 부여하고, 기본적으로 모든 권한을 제한합니다.
ⅵ) 웹 애플리케이션 방화벽(WAF) 사용
 SQL 인젝션 공격을 탐지하고 차단할 수 있는 WAF를 사용하여 추가적인 보안 계층을 제공합니다.

반응형