참 조건 인젝션


대부분의 쿼리는 WHERE 절 구문을 통하여 데이터를 필터링합니다. 하지만 악의적인 입 력값은 이러한 WHERE 조건절을 항상 참인 상태로 조작합니다.

쿼리 조건문 1=1은 항상 참을 의미합니다. 어떤 조건문에도 or 1=1을 추가하면 모든 쿼 리 조건은 참으로 변경됩니다. 만일 위의 예제에서 $ID 값이 100’ or 1=1이라는 문자열을 입력한다면 쿼리는 다음과 같 이 바뀔 수 있습니다.

select FirstName, LastName, Password from members where Id = 100 or 1=1 

이 조건은 모두 참으로 동작합니다. 이런 경우 모든 회원의 정보를 해커가 확인할 수 있는 심각한 보안 유출이 될 수 있습니다. “”=”” 참 조건도 자주 사용되는 인젝션 패턴입니다. 만일 회원 로그인 처리를 위해서 사용자 이름과 패스워드를 받아 처리한다고 할 때,

$queryString = 'SELECT * FROM members WHERE Name ="' + 아이디 + '" AND Pass ="' + 비밀번호 + '" ' 

와 같이 쿼리문을 작성할 수 있을 것입니다.

SELECT * FROM Users WHERE Name ="" or ""="" AND Pass ="" or ""="" 

하지만 인젝션 해커가 사용자 아이디와 패스워드에 or “”=”“라고 입력한다면 쿼리문은, 로 바뀌어 처리될 것입니다. 위 조건에서 or “”=”“는 항상 참 조건으로 그냥 회원 로그인 처리가 될 것입니다.