2012-05-17 4 views
0

웹 양식에서 제출물을 처리하는 PHP 함수를 개발 중입니다.PHP 보안을 위해 preg_replace 사용하기

허용되는 문자는 영숫자, a-b, 0-9입니다.

정규 표현식으로 preg_replace를 사용하여 처리하고 데이터베이스에 삽입하기 전에이 데이터를 정리하는 것이 안전합니까?

나는 일반적인 PHP 데이터 위생 옵션을 많이 보았다.하지만 시스템 디자인은 영숫자가 아닌 문자의 사용이나 소거를 엄격히 금지하고 있기 때문에 그렇지 않은 것은 제거하기가 더 쉽다고 생각한다. 일치 /[^a-zA-Z\s-0-9.,']/ 처음부터.

여기 올바른 길에 있습니까?

+0

정규 표현식은 영숫자가 아닙니다. 데이터베이스에 저장하기 전에 반드시 이스케이프해야합니다 (이미 준비된 문을 사용하지 않는 경우). – kapa

답변

4

유효하지 않은 문자를 제거하는 대신 영숫자 문자 만 데이터베이스에 저장하도록 허용하는 경우 유효하지 않은 입력을 제공하여 사용자에게 오류를 반환하는 것이 좋습니다. 이렇게하면 원래 입력 한 것과 다른 형태로 데이터가 다시 표시 될 때 사용자가 혼동하지 않게됩니다.

즉, preg_match()으로 입력의 유효성을 검사하여 사용자 요구 사항을 충족하는지 확인하고, 그렇지 않은 경우 오류를 사용자가 해결할 수 있도록 사용자에게 반환하십시오. 그런 다음 데이터베이스에 삽입하기 위해 이스케이프 처리하거나 준비된 명령문을 사용하십시오.

if (!preg_match('/^[a-z0-9., ]$/i', $input)) { 
    // error Invalid input. Please use only letters and numbers 
} 
else { 
    // call escape function on $input or insert it with a prepared statement 
    // whatever is the appropriate method for your RDBMS api. 
} 
+0

'/ i'가 필요합니다. if (preg_match ('/^[\ W _] $ /', $ input)) {' – DaveRandom