SQL Injection 공격을 이해하기 위해서는 논리연산자(Logical Operators)를 잘 이해하면 많은 도움이 된다. 여기에서는 MySQL의 연산자 중의 일부에대해서 설명한다.
SQL의 모든 놀리연산의 결과는 TRUE, FALSE, NULL(UNKNOWN)으로 나타난다. 이러한 논리 연산의 결과를 MySQL에서는 1 (TRUE), 0 (FALSE) 그리고 NULL 적용되어 있다. 대부분의 DB에서 이와 같은 방식을 쓰이나 일부 DB에서는 0 보다 큰 값을 TRUE으로 사용하기도 한다.
다음은 MySQL의 모든 버전에서 쓰이는 논리 연사자(진한 회색)와 일부 연산자(연한 회색)이다.
그림1. Logical Operators(MySQL 3.23/4.0/4.1/5.0/5.1/6.0)
※ 참고 SITE :
- Logical Operators : http://dev.mysql.com/doc/refman/4.1/en/logical-operators.html
- Oprators : http://dev.mysql.com/doc/refman/4.1/en/non-typed-operators.html
- Logical Operators : http://dev.mysql.com/doc/refman/4.1/en/logical-operators.html
- Oprators : http://dev.mysql.com/doc/refman/4.1/en/non-typed-operators.html
이러한 논리 연산자는 대부분 잘 이해하고 있겠지만 논리 연산자에 대한 설명이므로 하나하나에 대해서 알아 보도록 하겠습니다. 연산자에 대해서 잘 이해하고 있다면 아래의 설명은 생략하셔도 무방합니다.
0x01 Logical AND Operator
MySQL에서는 논리 AND연산자를 다음과 같이 2가지로 정의하고 하고 있습니다.
AND, &&
|
0x02 Logical OR Operator
논리 OR 연사자는 다음과 같이 2가지로 정의하고 있습니다.
OR, ||
|
0x03 Logical XOR Operator
논리 XOR 연산자는 다음과 같이 정의하고 있습니다.
XOR
|
0x04 Logical NOT Operator
논리 NOT 연산자는 다음과 같이 2가지로 정의하고 있습니다.
NOT, !
|
0x05 Etc Operators
[내용]
어쩌면 논리 연산자는 은연중 당연히 알고 있는 내용일지도 모른다. 하지만 이 논리 연산자를 잘 연구하면 조금의 변화를 꾀할 수 있다. 이 점이 Blind SQL Injection 공격에서 많은 차이점을 불러온다. 예를 들어 필터링 우회 등에서 많은 도움이 될지도 모른다.
언제나 기본에 충실하는게 중요한거 같다. ||, &&게 있는지는 잘 몰랐는데 ^^; 뭔가 기본기를 빼고 너무 멀리 와버린거 같다는 생각이 든다.