DB

DB SQL Injection

차가운개발 2024. 10. 4. 19:13

 

SQL 인젝션은 웹 애플리케이션의 보안 취약점을 이용해 악의적인 사용자가 SQL 쿼리를 조작하고, 이를 통해 데이터베이스에 부정한 액세스를 시도하는 공격 기법이다. 웹 애플리케이션에서 사용자 입력을 적절하게 검증하지 않거나 필터링하지 않을 때 발생할 수 있다.

 

ㅇ SQL 인젝션의 결과 및 피해

  • 데이터 유출
    공격자는 데이터베이스에 저장된 민감한 정보를 쉽게 조회할 수 있다.
  • 데이터 조작
    공격자는 데이터를 삽입, 수정 또는 삭제할 수 있다.
  • 데이터베이스 구조 손상
    테이블을 삭제하거나 구조를 변경하여 시스템에 심각한 손상을 줄 수 있다.
  • 시스템 장악
    심각한 경우 운영체제 명령을 실행하거나 서버에 대한 접근 권한을 획득할 수 있다.

 

ㅇ SQL 인젝션 방지 방법

  • Prepared Statements 및 파라미터화 된 쿼리
    사용자의 입력값을 직접 SQL 쿼리에 넣는 대신, 파라미터화된 쿼리를 사용하여 입력값을 안전하게 처리한다.
String query = "SELECT * FROM users WHERE username = ? AND password = ?";
PreparedStatement stmt = connection.prepareStatement(query);
stmt.setString(1, username);
stmt.setString(2, password);
ResultSet rs = stmt.executeQuery();

 

  • ORM(Object-Relational-Mapping) 사용
    Hibernate와 같은 ORM 프레임워크를 사용하면 SQL 쿼리를 직접 작성하는 것을 피할 수 있고, 자동으로 쿼리를 파라미터화하여 SQL 인젝션의 위험을 줄일 수 있다.
  • 입력값 검증 및 필터링
    사용자 입력을 철저하게 검증하고, SQL 구문에서 사용되는 특수문자를 필터링하거나 이스케이프 처리해야 한다.
  • 최소 권한 원칙 적용
    데이터베이스 사용자에게 최소한의 권한만 부여하여 인젝션의 공격으로 인한 피해를 최소화한다.
  • 웹 애플리케이션 방화벽(WAF)
    SQL 인젝션 공격을 감지하고 차단할 수 있는 방화벽을 사용하여 보안을 강화할 수 있다.