복붙노트

PHP에서 register_globals 란 무엇입니까?

PHP

PHP에서 register_globals 란 무엇입니까?

누군가가 register_globals가 무엇인지 몇 가지 예를들 수 있습니까? 그리고 글로벌 $ user_id; 글로벌 레지스터로 간주 되나요?

해결법

  1. ==============================

    1.register_globals 지시어 :

    register_globals 지시어 :

    register_globals는 $ _REQUEST 배열의 요소를 변수로 등록하는 내부 PHP 설정입니다. POST 또는 GET을 통해 양식에 값을 제출하면 해당 입력 값이 PHP 스크립트의 변수를 통해 자동으로 액세스 할 수 있으며 입력 필드의 이름을 따서 이름이 지정됩니다.

    즉, 사용자 이름 텍스트 필드가 포함 된 양식을 제출하면 스크립트 시작 부분에있는 표현식 ($ username === $ _POST [ 'username'])이 true를 반환합니다.

    그것의 평판은 특히 보안 관점에서 엄격한 코딩 스타일보다 적은 것을 따르는 사람들에게 많은 보안 허점을 열었다는 사실에 기인합니다.

    고전적인 예 :

    if(user_is_admin($user))
    {
        $authorized = true;
    }
    
    if($authorized)
    {
        // let them do anything they want
    }
    

    이제 웹 브라우저에서 스크립트를 방문하고 서버에 register_globals가 설정된 경우 URL에? authorized = 1을 추가하면 god-mode가 활성화됩니다.

    글로벌 키워드 :

    전역 키워드는 register_globals와는 거의 관련이 없습니다.

    다음은 그 사용 예입니다.

    $foo = 'bar';
    
    baz();
    
    function baz()
    {
        echo $foo; // PHP warns you about trying to use an uninitialized variable
                   // and nothing is output (because $foo doesn't exist here)
    }
    
    buzz();
    
    function buzz()
    {
        global $foo; // Enables the use of $foo in this scope
    
        echo $foo; // Prints 'bar' to screen
    }
    
  2. ==============================

    2.GET, POST, REQUEST, COOKIE를 언급하는 모든 사람들은 register_globals = on에 영향을 미칩니다.

    GET, POST, REQUEST, COOKIE를 언급하는 모든 사람들은 register_globals = on에 영향을 미칩니다.

    너를 알리기 위해이 편지를 쓰고있어.

    $ _SESSION은 register_globals = on으로 인해 영향을받습니다. http://php.net/manual/en/security.globals.php

    즉, 다음과 같이하면 -

    $_SESSION[x] = 123;
    $x = 'asd';
    echo $_SESSION[x];
    

    출력은 asd입니다.

    그리고 이로 인해 심각한 보안 문제와 버그가 발생합니다. 나는 Hostgator 공유 호스팅을 사용하는 동안 최근에 그렇게 나쁜 경험을했습니다. 기본적으로 register_globals = on을가집니다.

  3. ==============================

    3.register_globals = on으로 설정하면 GET 또는 POST 또는 COOKIE를 통해 전달 된 모든 항목이 자동으로 코드에서 전역 변수로 표시됩니다. 이로 인해 보안상의 문제가 발생할 수 있습니다.

    register_globals = on으로 설정하면 GET 또는 POST 또는 COOKIE를 통해 전달 된 모든 항목이 자동으로 코드에서 전역 변수로 표시됩니다. 이로 인해 보안상의 문제가 발생할 수 있습니다.

    나는. 당신은 url test.php? access_level = 100을 클릭하면 PHP에서 $ access_level = 100이됩니다.

    global $ somevar를 할 때 - 당신은 자신의 전역 변수를 만들고 있습니다. 보통 큰 문제는 아닙니다.

  4. ==============================

    4.register_globals 설정은 폼, 서버 및 환경에 액세스하는 방법을 제어합니다. 변수.

    register_globals 설정은 폼, 서버 및 환경에 액세스하는 방법을 제어합니다. 변수.

    전역 배열 (GET [], POST [] 및 REQUEST [])없이 양식 속성에 액세스 할 수 있습니다.

    예 : http://www.example.com/one.php?myinput=abc

    one.php에서 직접 액세스 할 수 있습니다.

    echo $myinput; // abc
    

    전역 배열을 통해서만 모든 속성에 액세스해야합니다.

    예 : http://www.example.com/one.php?myinput=abc

    one.php에서 액세스해야합니다.

    echo $_GET['myinput']; //abc
    
  5. ==============================

    5.GET 또는 POST에서 전달 된 모든 항목이 자동으로 PHP의 변수로 변환됩니다.

    GET 또는 POST에서 전달 된 모든 항목이 자동으로 PHP의 변수로 변환됩니다.

    예 :

    http://www.domain.com/vars.php?myvar=123
    

    코딩을하지 않고도 자동으로 PHP 코드의 나머지 부분에서 사용할 수있는 변수가됩니다.

    $myvar  //with a value of 123
    

    등록 된 전역을 OFF로 설정하면 GET 또는 POST를 통해 전달 된 데이터가 자동으로 변수로 변환되지 않고, 대신에 $ _GET, $ _POST 및 $ _REQUEST 등의 수퍼 글로블을 사용하여 요청해야합니다.

    http://php.net/manual/en/security.globals.php는이 보안 관련 의미에 대한 추가 정보를 제공합니다.

    내가 잘못하면 다른 사람들이 나를 교정 할 수 있습니다.

    귀하의 질문과 관련하여 글로벌 $ user_id,이 'register_globals'의 의미에서 '글로벌'만들지 않습니다. 단순히 PHP 코드 내의 변수 범위를 변경합니다.

    자세한 정보는 http://php.net/manual/en/language.variables.scope.php를 참조하십시오.

  6. ==============================

    6.PHP의 전역 변수는 항상 액세스 할 수있는 변수입니다. 그들은 또한 슈퍼 전역으로 알려져 있습니다. 변수는 범위에 관계없이 항상 사용할 수있는 변수로 작성됩니다.

    PHP의 전역 변수는 항상 액세스 할 수있는 변수입니다. 그들은 또한 슈퍼 전역으로 알려져 있습니다. 변수는 범위에 관계없이 항상 사용할 수있는 변수로 작성됩니다.

    PHP에는 9 개의 전역 변수가 있습니다. 이 중 일부는이 토론과 관련이 있습니다.

    이제 $ _REQUEST superglobal에 초점을 맞추자. POST 메서드를 사용하여 사용자가 HTML 양식을 제출 한 후 데이터를 수집하는 데 사용됩니다.

    $ _POST와 $ _REQUEST는 서로 바꿔 사용할 수 있습니다. 그러나 $ _REQUEST에는 $ _GET 및 $ _COOKIE와 $ _POST가 포함되어 있으므로 데이터가 웹 양식에서 온 것인지 확실하지 않습니다.

    이제 @Tim에 의해 지적 된 것처럼 register_globals는 $ _REQUEST 배열의 요소를 변수로 등록하는 내부 PHP 설정입니다. 그것은 또한 PHP 설정에서 플래그로 알려져 있습니다. 일반적으로 php.ini 파일이라는 PHP 구성 파일에 설정됩니다. 이 설정은 두 가지 값을 가질 수 있습니다.

    "on"값은 PHP가 쿼리 문자열 매개 변수뿐만 아니라 많은 서버 변수에 대한 전역 변수를 자동으로 생성한다는 것을 의미합니다. 이것은 좋지 않고 보안상의 위험이 있습니다.

  7. ==============================

    7.글로벌 등록 :

    글로벌 등록 :

    기본값 : "0"

    변경 가능 : PHP_INI_PERDIR

    register_globals는 variables_order 지시어의 영향을받습니다.

    노트:

    이 기능은 PHP 5.3.0부터는 사용이 권장되지 않았으며 PHP 5.4.0부터는 제거되었습니다.

  8. from https://stackoverflow.com/questions/3593210/what-are-register-globals-in-php by cc-by-sa and MIT license