1. IS_Numberic 함수 소개
일부 국내 CMS 프로그램은 IS_Numberic 기능을 사용했습니다.
bool is_numeric (혼합 $ var)
var가 숫자이고 숫자 문자열 인 경우 true를 반환합니다. 그렇지 않으면 false를 반환합니다.
2. 기능이 안전합니까?
다음 으로이 기능이 안전한지 여부를 설명하기 위해 예를 살펴 보겠습니다.
코드 사본은 다음과 같습니다. $ s = is_numeric ($ _ get [ 's'])? $ _ get [ 's'] : 0;
$ sql = "test (type) 값 ($ s)에 삽입; // 값이 아닌 값 ( '$ s').
mysql_query ($ sql);
위의 조각 프로그램은 매개 변수 S가 숫자인지 여부를 결정하고 0이 아닌 경우 숫자를 반환 한 다음 데이터베이스 쿼리로 가져옵니다. (이런 식으로 SQL 문을 구성 할 수 없습니다)
S 매개 변수의 값으로 '1 또는 1'을 1661206f722031로 변환합니다.
프로그램이 실행 된 후 아래 그림과 같이 데이터베이스를 쿼리합니다.
이 테이블의 필드를 다시 정체하고 필터링하고 다른 SQL 문을 가져 오지 않으면 2 개의 주입이 발생합니다.
3. 요약
이 기능을 사용하지 마십시오.이 기능을 사용하려면 표준 SQL 문을 사용하고 조건에서 단일 따옴표를 추가하여 16 진수 0x31206F722031이 데이터베이스에 표시됩니다. 1 또는 1은 나타나지 않습니다.