Heim  >  Artikel  >  Backend-Entwicklung  >  PHP-Framework – Ein Teil des Codes im CI-Framework von PHP ist für mich selbst schwer zu verstehen. Ich hoffe, jemand kann mir einen Rat geben.

PHP-Framework – Ein Teil des Codes im CI-Framework von PHP ist für mich selbst schwer zu verstehen. Ich hoffe, jemand kann mir einen Rat geben.

WBOY
WBOYOriginal
2016-08-20 09:04:09893Durchsuche

<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>

Ich verstehe nicht ganz, was diese Codes bewirken und welche Vorteile sie haben?
Ich bitte die Meister demütig um Rat.

Antwortinhalt:

<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>

Ich verstehe nicht ganz, was diese Codes bewirken und welche Vorteile sie haben?
Ich bitte die Meister demütig um Rat.

Wenn Sie den Status von register_globals identifizieren, wenn die PHP-Version größer als 5.4 ist, können Sie sehen, dass das Array einige Schlüsselwörter enthält. Wenn register_globals aktiviert ist, bedeutet dies, dass alle Arten vorhanden sind Wenn Sie beispielsweise normalerweise $_POST verwenden, um die in der Post-Methode übergebenen Parameter abzurufen, werden sie bei der Injektion zu anderen Aktionen und müssen daher geschützt werden.

Informationen zu register_globals finden Sie unter
http://php.net/manual/zh/security.globals.php

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn