새소식

반응형
IT/보안

SQL injection의 예방 prepared Statement

  • -
반응형

SQL Injection 취약점을 대응하는 방법에 대한 설명이다. ( ) 에 들어갈 용어를 설명하시오.

[공격 대상 SQL 구문]

string query = "select * from member a where gubun = '" + a.gubun "'"

[대응 방법]

외부로부터 입력받은 값을 검증하지 않고, SQL문을 생성하는데 그대로 사용하는 경우 문제가 발생할 수 있다. 즉, gubun 값으로 a' or 'a'='a 를 입력하는 경우 쿼리가 항상 참이 되므로 member 테이블의 모든 내용이 조회된다. 이에 대한 대응 방안으로 파라미터를 받는 ( ) 객체를 상수 스트링(?) 으로 정의하고, 파라미터를 setString 과 같은 메소드로 설정하면 외부의 입력이 쿼리문의 구조를 바꾸는 것을 예방할 수 있다.

(답) Prepared Statement

[출처] 23회 정보보안기사 실기시험 문제분석(모범답안, 고득점 포인트)|작성자 온계절

 

SQL Injection은 악의적인 사용자가 입력 폼 등을 통해 SQL 쿼리에 악의적인 SQL 코드를 주입하여 데이터베이스를 비정상적으로 조작하려는 공격 기법입니다. 이 공격은 주로 사용자 입력을 통해 동적으로 생성된 SQL 쿼리에 문제가 있는 경우 발생할 수 있습니다.

Prepared Statement는 SQL Injection 공격을 예방하는 방법 중 하나입니다. 그 이유는 다음과 같습니다:

  1. 매개변수화(Parameterization): Prepared Statement를 사용하면 SQL 쿼리의 매개변수(placeholder)를 사용하여 쿼리에 데이터를 삽입할 때, 데이터 값 자체가 아닌 쿼리 구조만을 먼저 데이터베이스에 전송합니다. 이후 데이터는 따로 전달되어 쿼리와 별도로 처리됩니다. 따라서 악의적인 SQL 코드가 쿼리에 직접 삽입되는 것을 방지할 수 있습니다.
  2. SQL 인젝션 예방: Prepared Statement를 사용하면 데이터베이스 시스템은 쿼리를 실행하기 전에 쿼리를 미리 컴파일하고 최적화합니다. 이 과정에서 쿼리에 포함된 데이터는 데이터 값 자체로 처리되지 않고, 그 구조만을 쿼리 실행 시간에 결정됩니다. 따라서 외부 입력으로 인해 발생할 수 있는 SQL 문법 오류나 부적절한 쿼리 실행이 방지됩니다.
  3. 코드 안정성: Prepared Statement를 사용하면 코드의 안정성이 높아지며, 코드를 더 쉽게 이해하고 유지보수할 수 있습니다. SQL 쿼리와 데이터가 분리되어 있기 때문에 쿼리 변경이 필요할 때마다 전체 코드를 변경할 필요 없이 매개변수만 업데이트하면 됩니다.

따라서 Prepared Statement는 SQL Injection 공격을 예방하는 중요한 방법 중 하나이며, 개발자가 데이터베이스 액세스 코드를 작성할 때 고려해야 할 핵심 보안 사항입니다.

 

참고 사이트 : https://blog.naver.com/skinfosec2000/220482240245

 

[SQL인젝션] Prepared Statement를 쓰면 SQL 인젝션 공격이 되지 않는 이유는?

        Prepared Statement의 내부 원리           개요...

blog.naver.com

 

요약 : prepared statement를 사용하면 parse 과정을 최초 1번만 수행하고 그 이후에는 생략 가능 

 

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.