현재 위치: > 최신 기사 목록> get_magic_quotes_gpc 함수를 사용하여 마법 따옴표가 활성화되어 있는지 여부를 결정하는 방법은 무엇입니까? 모범 사례 분석

get_magic_quotes_gpc 함수를 사용하여 마법 따옴표가 활성화되어 있는지 여부를 결정하는 방법은 무엇입니까? 모범 사례 분석

gitbox 2025-06-10

PHP의 역사에서 Magic Quotes는 한때 SQL 주입과 같은 보안 문제를 방지하기 위해 Get, Post 및 Cookie의 데이터를 자동으로 추가하는 기본 기능이었습니다. 그러나 편의에 대한 혼란은 편의보다 많기 때문에 Magic Quotes는 PHP 5.4.0에서 완전히 제거되었습니다.

그럼에도 불구하고 일부 오래된 시스템을 유지할 때도 여전히 PHP 5.3 이하가 발생할 수 있습니다. 마법 인용문이 켜지는지 여부를 결정하는 것이 매우 중요합니다. 이 기사는 get_magic_quotes_gpc () 함수를 사용하여 판단을 내리고 해당 모범 사례 제안을 제공하는 방법을 소개합니다.

1. get_magic_quotes_gpc () 함수 소개

get_magic_quotes_gpc ()는 php가 Magic_Quotes_gpc가 활성화되어 있는지 여부를 결정하기 위해 내장 된 기능입니다. 반환 값은 부울입니다.

  • 마법 인용문이 활성화되어 있음을 나타 내기 위해 True 를 반환하십시오.

  • 거짓을 반환한다는 것은 마법의 인용문이 비활성화된다는 것을 의미합니다.

샘플 코드 :

 if (get_magic_quotes_gpc()) {
    echo "마법 인용문이 켜집니다";
} else {
    echo "마법 인용문이 닫혔습니다";
}

"정의되지 않은 함수"와 같은 함수를 실행할 때 오류 메시지를 받으면 PHP 버전이 5.4보다 높고 Magic Quotes가 제거되었음을 의미합니다.

2. 왜 마법 인용문을 판단해야합니까?

마법 인용문의 원래 의도는 좋지만 실제로는 데이터의 반복적 인 탈출을 유발합니다. 개발자는 운영 환경에 따라 StripsLashes ()를 수동으로 처리할지 여부를 동적으로 판단해야합니다. 예를 들어:

 $user_input = $_POST['username'];

if (get_magic_quotes_gpc()) {
    $user_input = stripslashes($user_input);
}

이 코드는 마법의 인용구로 인해 $ user_input 의 데이터가 중복되지 않도록하여 후속 통합 처리를 용이하게합니다.

3. 모범 사례 : 사용자 입력의 통합 처리

가장 권장되는 가장 권장되는 방법은 매번 판단하기보다는 입구에서 모든 GPC 데이터를 균일하게 처리하는 것입니다.

 function strip_magic_quotes(&$array) {
    foreach ($array as $key => $value) {
        if (is_array($value)) {
            strip_magic_quotes($array[$key]);
        } else {
            $array[$key] = stripslashes($value);
        }
    }
}

if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) {
    strip_magic_quotes($_GET);
    strip_magic_quotes($_POST);
    strip_magic_quotes($_COOKIE);
}

이 방법을 사용하면 애플리케이션의 모든 사용자 입력 데이터가 처음부터 "정제"되어 후속 논리 처리를 단순화합니다.

4. 제안 : Magic Quote 트랩을 피하기 위해 PHP 업그레이드

위의 방법을 사용하여 호환성을 처리 할 수 ​​있지만 최상의 솔루션은 PHP 버전을 업그레이드하는 것입니다 . 현대적인 PHP 프레임 워크 (Laravel, Symfony 등)는 더 이상 마법 인용문을 지원하거나 의존하지 않습니다. 데이터 필터링 및 보안 제어를위한보다 완전한 방법이 있습니다.

  • Filter_Input () 및 기타 입력 필터 함수를 사용하십시오.

  • SQL 주입을 방지하기 위해 PDO 결합 파라미터를 사용하고;

  • HTML 출력에는 htmlspecialchars ()를 사용하십시오.

5. 권장 디버깅 보조 도구

이전 PHP 시스템을 디버깅 할 때 간단한 디버깅 스크립트를 사용하여 현재 환경이 마법의 인용문으로 켜져 있는지 신속하게 결정할 수 있습니다.

 echo '<pre>';
echo 'magic_quotes_gpc: ' . (get_magic_quotes_gpc() ? 'ON' : 'OFF') . PHP_EOL;
echo 'Sample $_GET: ' . print_r($_GET, true);
echo '</pre>';

스크립트를 배포 한 후 다음과 같은 URL에 액세스하십시오.

 http://gitbox.net/debug.php?name=O\'Reilly

출력을 다음과 같이 보는 경우

 name => O\\'Reilly

이는 마법의 인용문이 적용되었음을 의미하며 (백 슬래시가 자동으로 추가 됨) StripsLashes () 가 필요합니다.