2012-09-03 2 views
-3

왜이 쿼리는 ID 116 행을 반환하지 :SQL 주입 결과

SELECT * 
FROM blahTable 
WHERE id = '116\' OR \'1\'=\'1' 

테이블의 ID가 116입니다 만 확실히 그 주입 코드가 추가 된 후에는 0 행을 반환해야합니까?

+1

주입 코드 (116) 때문에? 질문과 관련하여 제목은 무엇입니까? 그리고 네, ID 116 행을 선택하는 경우, MySQL은 그 행을 반환합니다. – feeela

+0

116 'OR'1 '='1 mysql_real_escape string()이 적용된 상태에서, 나는 그것이 상당히 분명하다고 생각했다. – Juddling

+0

제목에 사과 드리며 편집을 승인했습니다. – Juddling

답변

3

그래서 당신이 물어 보는 이유는 ID가 '116\' OR \'1\'=\'1' 인 쿼리를 실행할 때 ID가 116 인 행이 반환되는 이유입니다.

이유는 유형 변환입니다. 문자열은 정수로 변환되기 때문에 정수로 변환되고 116으로 변환됩니다. 더 많은 것을 읽으십시오 : http://dev.mysql.com/doc/refman/5.0/en/type-conversion.html

116foofoofoo 같이 끈은 비교를 위해 116로 개조된다.

mysql_real_escape_string을 적용하는 대신 숫자가 아닌 문자열을위한 메소드를 사용해야합니다.

1

CAST('116\' OR \'1\'=\'1' AS SIGNED) 또는 UNSIGNED 반환