2012-05-12 2 views
1

나는 SQL 주입 방지를위한 많은 문서를 읽었습니다. 그들은 PDOmysql_real_escape_string을 사용한다고 말했습니다.SQL injection을 방지하기 위해 변수를 정리하는 방법 - 공용체 선택?

I 프로그램 BBS 코드 (이전 스타일 ...), 내 BBS 코드를 사용하는 사람들은, 처럼 몇 가지 간단한 코드를 수행

select * from $g4[member_table] where mb_id='$mb_id' and mb_1='$my_option' 

$mb_idmysql_real_escape_string 하지만 $my_option 아마하지 않습니다. 그래서 모두 $_GET, $_POST, $_REQUEST varibales를 clean_sql()과 같은 php 함수를 사용하여 청소하고 싶습니다.

clean_sql() $ my_option 값이 때 는 "1 관리자 '를 선택 노동 조합 *이 g4_member에서 mb_id ='"

날 clean_sql 같은 기능을 알고 주시기 바랍니다 모든 SQL 문을 취소()?

=== cleal_sql은 (는) PHP 4.x에서 작동해야합니다.

+0

'sql-injection'에 태그를 지정하면'php' 태그는 중복되어입니다. –

+0

@ ta.speot.is // 변경되었습니다. 감사. – OpenCode

답변

3

SQL 삽입과 관련하여 우수 사례는 UNION 사용 여부에 관계없이 동일합니다. $_POST, $_GET, $_REQUEST 또는 다른 형태의 사용자 제공 데이터에 대해서도 동일하게 적용됩니다. 준비된 문구 (PDO 또는 MySQLi를 통해) 또는 mysqli_real_escape_string()을 사용하십시오.

물론 사용자가 제공 한 데이터 을 확인하고 위생 처리하여을 데이터베이스에 저장하려고 시도해야합니다. filter_var()ctype_*과 같은 기능을 사용하면 데이터의 유효성을 검사하거나 데이터를 쉽게 위생 할 수 있습니다.

+0

준비된 진술서에 +1 –

+0

@ 존 콘드// 고마워. 많은 호스팅 회사는 PDO를 지원하지 않으므로 BBS 코드를 변경할 수 없습니다. filter_var()는 좋은 함수이지만 PHP 5.2.x 이상이 필요합니다. 일부는 PHP 4.x를 사용합니다. – OpenCode

+0

4.x는 오랜 시간 동안 폐기되었습니다. 당신은 분명히 더 이상지지해서는 안됩니다. PHP 5.2는 현재 가장 많이 사용되는 PHP 버전이며, 현재 대부분의 PHP 소프트웨어에 필요한 표준 수준의 호환성을 제공합니다. –

관련 문제