마법의 인용문은 PHPer에 대한 일반적인 질문입니다. 오늘 우연히 PHP 매뉴얼과 그에 대한 답변이 포함된 기사를 보았는데, 여기에 간단한 요약을 하겠습니다.
즉, 매직 따옴표를 켜면 입력된 데이터가 자동으로 이스케이프됩니다. 그 중 작은따옴표('), 큰따옴표("), 백슬래시, NULL 문자는 모두 이스케이프됩니다(백슬래시가 추가됨). 실제로 이 작업은 기본적으로 addlashes 함수를 호출합니다.
Magic quote를 사용하는 이유
편리하고 빠릅니다.
PHP 설계자들은 처음부터 빠르고 편리한 프로그래밍을 구상했습니다. 예를 들어, 데이터베이스에 삽입할 때 매직 따옴표가 자동으로 데이터를 이스케이프하므로 매우 편리합니다.
초보자에게 좋습니다
마법의 인용문은 어느 정도 초보자가 스크립트의 보안 위험을 피하는 데 도움이 될 수 있습니다. 예를 들어 보호 조치가 없는 코드에서 매직 따옴표를 켜면 삽입 문제와 같은 많은 위험이 줄어듭니다. 물론 이 방법만으로는 이러한 보안 문제를 완전히 예방할 수는 없습니다.
"닫을 수 있는 권한이 없습니다."
분명히 이 문제를 알고 있을 수도 있지만 호스트 공간을 완전히 제어할 수는 없습니다.
매직 따옴표를 사용하지 않는 이유
이식성 이 기능의 설정 여부에 관계없이 후속 데이터 필터링 작업에 영향을 미치기 때문에 스크립트의 이식성에 영향을 미칩니다.
성능 문제 모든 외부 데이터는 검색되기 전에 이스케이프되므로 런타임 비용이 확실히 증가합니다(모든 데이터를 이스케이프해야 하는 것은 아닙니다).
혼란 야기 위에서 언급했듯이 모든 데이터를 이스케이프해야 하는 것은 아닙니다. 발생할 수 있는 한 가지 상황은 이스케이프되지 않은 데이터를 얻기 위해 스트립슬래시 기능 "crazy"를 사용할 때입니다.
PHP6은 더 이상 지원되지 않습니다.
PHP 설계자들은 자신들의 "실수"를 분명히 깨닫고 PHP6에서 이를 더 이상 사용하지 않습니다.
매직 따옴표를 비활성화하는 방법
내 의견으로는 Magic quote를 전체적으로 비활성화하려면 php.ini 구성 파일을 사용하는 것이 가장 안정적입니다. 아래 코드를 참조하십시오
. GET/POST/쿠키에 대한 매직 따옴표 data.magic_quotes_gpc = Off; 런타임 생성 데이터(예: SQL, exec() 등의 데이터)에 대한 매직 따옴표 사용; Sybase 스타일 매직 따옴표(' 대신 ''로 ' 이스케이프).magic_quotes_sybase = Off 그러나 온라인 호스트는 php.ini 파일 수정을 허용하지 않을 수 있으므로 .htaccess 파일을 사용하여 비활성화하고 다음 코드
php_flag Magic_quotes_gpc Off 위의 내용은 이식된 코드의 경우 Magic_quotes가 비활성화되었는지 여부에 관계없이 데이터가 일관성을 유지해야 합니다. 그러면 다음 코드가 도움이 될 수 있습니다
. <?phpif (get_magic_quotes_gpc()) {function Stripslashes_deep($value) {$value = is_array($value) ?array_map('stripslashes_deep', $value) :stripslashes($value);return $ 값;}$_GET = array_map('stripslashes_deep', $_GET);$_POST = array_map('stripslashes_deep', $_POST);$_COOKIE = array_map('stripslashes_deep', $_COOKIE);$_REQUEST = array_map('stripslashes_deep' , $_요청);}