ex)
SELECT * FROM users
WHERE username = 'test1' AND password = 'test1'
위와 같은 SQL 쿼리가 있다고 가정해 보자.
공격자는 사용자명 필드에 ' OR '1' = '1을 입력하면, 쿼리는 아래와 같이 변형된다.
SELECT * FROM users
WHERE username = '' OR '1' = '1'
AND password = 'test1'
위처럼 변형되어 위 쿼리는 항상 참이 되어 모든 사용자 정보를 반환하게 된다.
: 가장 일반적인 유형으로, 공격자가 동일한 통신 채널을 사용하여 공격을 수행하고 결과를 수집한다.
: UNION 연산자를 사용하여 추가 결과를 가져온다.
: 데이터베이스 오류 메시지를 이요하여 정보를 추출한다.
: 직접적인 데이터 전송이 없는 상태에서 공격자가 시스템의 동작을 관찰하여 정보를 추론한다.
: 참 / 거짓 질문을 통해 정보를 추출한다.
: 쿼리 응답 시간을 관찰하여 정보를 추론한다.
: 로그인 폼을 우회하여 무단 접근을 얻는다.
: 추가 SELECT문을 삽입하여 다른 테이블의 데이터를 추출한다.
: 세미콜론을 사용하여 여러 쿼리를 한번에 실행한다.
: 인라인 주석 (--) 또는 블록 주석 (/* */)을 사용하여 쿼리의 나머지 부분을 무효화한다.
: 사용자 입력을 SQL 문의 매개변수로 전달한다.
: 모든 사용자 입력을 철저히 검증한다.
: 특수 문자를 적절히 이스케이프 처리한다.
: 데이터베이스 사용자에게 필요한 최소한의 권한만 부여한다.
: 객체-관계 매핑(ORF) 라이브러리를 사용하여 SQL 쿼리를 안전하게 생성한다.
: SQL 인젝션 공격을 탐지하고 차단한다.