재인쇄: 링크를 열려면 클릭하세요
PHP에서 Magic_quotes_gpc 함수의 역할은 게시, 가져오기, 쿠키 데이터와 같이 사용자가 요청한 데이터를 결정하고 구문 분석하는 것입니다. 이스케이프 문자 " "를 추가하여 이러한 데이터가 프로그램, 특히 특수 문자로 인한 오염으로 인해 데이터베이스 문에서 치명적인 오류를 일으키지 않도록 합니다.
magic_quotes_gpc=On의 경우, 입력 데이터에 작은따옴표('), 큰따옴표("), 백슬래시(), NUL(NULL 문자) 등
문자가 포함되어 있으면 추가됨 상단 백슬래시가 필요합니다. 이 옵션이 꺼져 있으면 addlashes 함수를 호출하여 문자열에 이스케이프를 추가해야 합니다.
이 옵션도 켜져 있어야 하기 때문입니다. 이 옵션은 PHP6에서 삭제되었습니다. 모든 프로그래밍은 Magic_quotes_gpc=Off에서 수행되어야 합니다. 이러한 환경에서 사용자의 데이터가 이스케이프되지 않으면 결과는 단순히 프로그램 오류가 아닙니다. 데이터베이스 주입 공격의 위험이 있으므로 앞으로는 서버를 PHP6으로 업데이트해야 하고 프로그램이 제대로 작동하지 않는 것을 피하기 위해 더 이상 모든 사람이 이 설정에 의존해서는 안 됩니다.
magic_quotes_gpc=On일 때 get_magic_quotes_gpc() 함수는 1을 반환합니다
magic_quotes_gpc=Off일 때 get_magic_quotes_gpc() 함수는 0을 반환합니다
따라서 이 get_magic_quotes_gpc() 함수의 기능은 환경 변수 Magic_quotes_gpc의 값을 가져오는 것임을 알 수 있습니다. PHP6에서는 Magic_quotes_gpc 옵션이 삭제되었으므로 PHP6에서는 이 함수가 no라고 생각합니다.
php는 addlashes 기능 사용 여부를 결정할 수 있도록 get_magic_quotes_gpc 기능이 활성화되어 있는지 확인합니다.
function SQLString($c, $t){ $c=(!get_magic_quotes_gpc())?addslashes($c):$c; switch($t){ case 'text': $c=($c!='')?"'".$c."'":'NULL'; break; case 'search': $c="'%%".$c."%%'"; break; case 'int': $c=($c!='')?intval($c):'0'; break; } return $c; }
function check_input($value) { // 去除斜杠 if (get_magic_quotes_gpc()) { $value = stripslashes($value); } // 如果不是数字则加引号 if (!is_numeric($value)) { $value = “‘” . mysql_real_escape_string($value) . “‘”; } return $value; } $con = mysql_connect(“localhost”, “hello”, “321″); if (!$con) { die(‘Could not connect: ‘ . mysql_error()); } // 进行安全的 SQL $user = check_input($_POST['user']); $pwd = check_input($_POST['pwd']); $sql = “SELECT * FROM users WHERE user=$user AND password=$pwd”; mysql_query($sql); mysql_close($con); ?>