SQL 인젝션

Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection')

설명

SQL 인젝션은 외부 입력을 처리할 때 SQL 쿼리에 특별한 문자를 적절히 처리하지 않아서 발생합니다. 이는 공격자가 데이터베이스 명령을 임의로 실행하거나 변조할 수 있게 합니다.

잠재적 영향

  • 무단 코드 실행: 공격자가 SQL 명령을 이용하여 시스템 명령을 실행할 수 있습니다.

  • 애플리케이션 데이터 읽기: SQL 데이터베이스에 저장된 민감한 정보를 읽을 수 있습니다.

  • 권한 상승: 다른 사용자의 신분으로 시스템에 접근할 수 있습니다.

  • 보호 메커니즘 우회: 인증 및 접근 제어를 우회할 수 있습니다.

  • 데이터 수정: 데이터베이스의 정보를 읽거나 수정, 삭제할 수 있습니다.

해결 방법

  1. Prepared Statements를 사용: 데이터베이스에 전달되는 쿼리를 미리 컴파일하여 입력값을 안전하게 처리합니다.

  2. ORM 사용: Hibernate와 같은 Object-Relational Mapping 도구를 통해 SQL 명령어 작성 없이 데이터베이스 조작을 수행합니다.

  3. 사용자 입력 검증: 이메일/문자열 등 입력값에 허용된 특정 패턴을 설정하세요.

  4. 보안라이브러리 사용: SQLi 보호 기능이 내장된 라이브러리를 활용합니다.

  5. 최소 권한 부여: 데이터베이스 사용자에게 최소한의 권한만 부여하여 손상을 줄입니다.

취약한 코드 및 안전한 코드 예시

취약한 코드

안전한 코드

설명:

  • 취약한 코드: 이 코드에서는 사용자 이름과 비밀번호와 같은 사용자 입력을 직접 SQL 쿼리에 포함시켜, 공격자가 SQL 구문을 주입할 수 있게 되어 SQL 인젝션 공격에 취약해집니다.

  • 안전한 코드: PreparedStatement를 사용하여 사용자 입력을 파라미터로 처리함으로써 SQL 구문 주입을 막고, 외부 입력이 SQL 명령어로 처리되지 않도록 합니다.

관련 CVE

참조

Last updated