2010-02-25 3 views
1

예 : 입력 필터링 양식 데이터의 경우이 값이 link입니까? 예를 들어 게시물로?PHP에서 입력 필터링?

<?php 
$var=300; 

$int_options = array(
"options"=>array 
    (
    "min_range"=>0, 
    "max_range"=>256 
) 
); 

if(!filter_var($var, FILTER_VALIDATE_INT, $int_options)) 
    { 
    echo("Integer is not valid"); 
    } 
else 
    { 
    echo("Integer is valid"); 
    } 
?> 

가장 일반적인 필터링은 무엇입니까? 문자열과 숫자를 살균하는 것과 같습니다. 나는 서버 측의 전자 메일 필드와 자바 스크립트의 정규 표현식 검사를 위해 preg_match를 사용한다. 나는 유효성 검사가 아니지만 가장 일반적인 것들을 필터링하는 일을하고 싶습니다.

사물의 이러한 종류의 난 당신이 그것에 대해 어떻게 생각하십니까 멀리 예를 들어, 클래스의 일부 공공 정적 함수 내 응용 프로그램에서,이

Validate::String($str); 
    Validate::Interger($int); 

같은 추상 수 있다고 생각?

답변

1

filter_var()가 좋습니다. 모든 유형의 SQL 문에서 이러한 입력을 사용할 계획이라면 SQL 문을 적절하게 적절하게 소독해야합니다.

PDO 준비 문을 사용하면 mysql_real_escape_string 또는 다른 db 래퍼 (MBD2 등)가이 기능을 제공해야합니다.

여기서 중요한 아이디어는 데이터 필터링과 위생간에 차이가 있다는 것과 각기 다른 수준의 작업이 있다는 것입니다. 그것은 여러 부분으로 구성된 과정입니다.

필터링의 경우 (? 이것이 int이며) 타입 체크를 할 수있는 다음 입력이 기준을 충족하는지 확인 (1과 128 사이의 INT는?)

또한 소독해야합니다 자료. htmlspecialchars 출력, 적절한 인용 및 SQL에서 사용하기 위해 이스케이프.

+0

하지만 더 동적 SQL을 사용하는 경우 어떻게해야합니까? – marko

+0

또는 동적 SQL을 수행하면 안됩니까? – marko

+0

@marko : 사용자 입력 (동적)에서 쿼리를 작성하는 경우 SQL 주입에 취약하지 않도록 입력을 적절히 이스케이프하고 인용해야합니다. 사용 가능한 래퍼를 사용하여 쿼리를 쉽게 작성할 수 있습니다. 가변 열 이름을 사용하지 않는다면, 일반적인 합의는 나쁜 생각입니다. 참조 : http : // stackoverflow.com/questions/2323161/만들기 - 동적 - php - 삽입 - mysql 함수/2323226 # 2323226 – jasonbar

0

사용자 입력을 필터링하는 방법에 대한 공통된 사양은 없습니다. 내장 된 함수를 사용하는 것은 아주 좋은 출발점입니다.

0

날짜 필터링은 매우 일반적입니다. 이를 위해 strtotime()을 사용하여 합리적인 날짜 (1969 년이 아님)로 나오는지 확인하십시오. 그런 다음 사용자는 "+12 일"을 포함한 모든 항목을 입력 할 수 있습니다.

암호는 일반적이지만 고유 한 경우입니다. 공백을 허용하고 싶지 않을 수도 있고 최소 길이 여야하며 문자와 숫자가 포함되어야합니다.

소셜 시큐리티 번호, 전화 번호 및 우편 번호와 같은 데이터 요소는 단순 할 수 있으며 특정 길이 여야하며 숫자 만 포함해야합니다 (우리). 또는 그것들을 견고하게 만드십시오. 유효한 형식이고 "사용 된"범위 내에 있는지 확인하십시오. 예를 들어 전화 번호는 0으로 시작할 수 없습니다.

이상적으로 하나의 유효성 검사는 다른 인증을 사용합니다. 예를 들어, "only_digits"유효성 검사 함수를 먼저 호출하는 우편 번호는 유효하면보다 자세한 검사를 수행합니다.

+0

귀하의 우편 예는 미국 이외의 실패 - 영국 시스템은 훨씬 더 복잡하고, 예를 들어 일부 지역 돈 심지어 우편 번호가 없습니다. 미국에서도/\ d {5} - \ d {4} /는 유효한 우편 번호이므로 only_digits는 신뢰할 수 없습니다. – ehdv