카티션 곱이란 두 개 이상의 집합에서 가능한 모든 조합을 생성하는 연산이다. 이는 SQL Injection을 위해 사용하는 공격문으로 사용할 수 있다.
만약 위와 같은 쿼리가 있다고 가정해보자.
4줄로 이뤄진 쿼리지만, 한줄로 존재한다고 가정.
K와 Q 별칭으로 Q.SALARY 와 ID 동일한 Join 조건이 존재한다.
만약 여기서 e_salary에 아래와 같은 입력을 사용한다면?
'9999')--'
위 사진과 같이 주석으로 인해 뒷 부분이 주석처리된다. 따라서 Join 조건 중 하나가 없으므로 카티션 곱이 발생해 WHERE 절이 없는 것과 동일한 결과를 보여준다.
아래와 같은 쿼리문과 동일하게 된다.
카티션 곱 발생 조건
- Join 조건
- 논리적으로 잘못된 조인 조건 : 문법 오류가 존재하는 쿼리가 아님.