>  기사  >  백엔드 개발  >  PHP 프레임워크 - PHP의 CI 프레임워크에 있는 코드는 혼자서는 이해하기 어렵습니다. 누군가 조언을 해줄 수 있기를 바랍니다.

PHP 프레임워크 - PHP의 CI 프레임워크에 있는 코드는 혼자서는 이해하기 어렵습니다. 누군가 조언을 해줄 수 있기를 바랍니다.

WBOY
WBOY원래의
2016-08-20 09:04:09853검색

<code>/*
 * ------------------------------------------------------
 * Security procedures
 * ------------------------------------------------------
 */

if ( ! is_php('5.4')) // 如果php版本大于等于5.4
{
    ini_set('magic_quotes_runtime', 0);

    if ((bool) ini_get('register_globals'))
    {
        $_protected = array(
            '_SERVER',
            '_GET',
            '_POST',
            '_FILES',
            '_REQUEST',
            '_SESSION',
            '_ENV',
            '_COOKIE',
            'GLOBALS',
            'HTTP_RAW_POST_DATA',
            'system_path',
            'application_folder',
            'view_folder',
            '_protected',
            '_registered'
        );

        $_registered = ini_get('variables_order');
        foreach (array('E' => '_ENV', 'G' => '_GET', 'P' => '_POST', 'C' => '_COOKIE', 'S' => '_SERVER') as $key => $superglobal)
        {
            if (strpos($_registered, $key) === FALSE)
            {
                continue;
            }

            foreach (array_keys($$superglobal) as $var)
            {
                if (isset($GLOBALS[$var]) && ! in_array($var, $_protected, TRUE))
                {
                    $GLOBALS[$var] = NULL;
                }
            }
        }
    }
}</code>

이 코드가 무엇을 하는지 잘 모르겠습니다. 그렇게 하면 어떤 이점이 있나요?
마스터님들께 겸허히 조언을 구합니다.

답글 내용:

<code>/*
 * ------------------------------------------------------
 * Security procedures
 * ------------------------------------------------------
 */

if ( ! is_php('5.4')) // 如果php版本大于等于5.4
{
    ini_set('magic_quotes_runtime', 0);

    if ((bool) ini_get('register_globals'))
    {
        $_protected = array(
            '_SERVER',
            '_GET',
            '_POST',
            '_FILES',
            '_REQUEST',
            '_SESSION',
            '_ENV',
            '_COOKIE',
            'GLOBALS',
            'HTTP_RAW_POST_DATA',
            'system_path',
            'application_folder',
            'view_folder',
            '_protected',
            '_registered'
        );

        $_registered = ini_get('variables_order');
        foreach (array('E' => '_ENV', 'G' => '_GET', 'P' => '_POST', 'C' => '_COOKIE', 'S' => '_SERVER') as $key => $superglobal)
        {
            if (strpos($_registered, $key) === FALSE)
            {
                continue;
            }

            foreach (array_keys($$superglobal) as $var)
            {
                if (isset($GLOBALS[$var]) && ! in_array($var, $_protected, TRUE))
                {
                    $GLOBALS[$var] = NULL;
                }
            }
        }
    }
}</code>

이 코드가 무엇을 하는지 잘 모르겠습니다. 그렇게 하면 어떤 이점이 있나요?
마스터님들께 겸허히 조언을 구합니다.

PHP 버전이 5.4 이상일 때 Register_globals 상태를 확인하면 배열에 일부 키워드가 있음을 알 수 있습니다. 예를 들어 일반적으로 $_POST를 사용하여 post 메서드에 전달된 매개변수를 가져오는 경우 해당 변수가 주입되면 다른 작업이 되므로 보호해야 합니다.

register_globals에 대한 자세한 내용은
http://php.net/manual/zh/security.globals.php

를 참조하세요.
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.