Programing

PHP에서 register_globals는 무엇입니까?

crosscheck 2020. 11. 30. 07:49
반응형

PHP에서 register_globals는 무엇입니까?


누군가가 어떤 예를 들어 줄 수 있습니까 register_globals?
그리고 global $user_id;글로벌 레지스터 간주됩니까?


register_globals지침 :

register_globals$_REQUEST배열의 요소를 변수로 등록하는 내부 PHP 설정입니다 . 당신은을 통해 폼에 값을 제출하는 경우 POST또는 GET, 그 입력 값이 자동으로 입력 필드의 이름의 이름을 딴 PHP 스크립트의 변수를 통해 액세스 할 수 있습니다.

즉, username텍스트 필드가 포함 된 양식을 제출 한 경우 ($username === $_POST['username'])스크립트 맨 앞에 있는 표현식 이를 반환 true합니다.

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

전형적인 예 :

if(user_is_admin($user))
{
    $authorized = true;
}

if($authorized)
{
    // let them do anything they want
}

이제 웹 브라우저에서 해당 스크립트를 방문하고 서버가 register_globals켜져 ?authorized=1있는 경우 URL에 추가 하기 만하면 God-mode가 활성화됩니다!

global키워드 :

global 키워드는 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
}

모든 사람에 대한 언급은 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.


register_globals = on을 사용하면 GET, POST 또는 COOKIE를 통해 전달 된 모든 것이 코드에서 자동으로 전역 변수로 표시되므로 보안 결과가 발생할 수 있습니다.

즉, url test.php? access_level = 100을 클릭하면 PHP에서 $ access_level = 100이됩니다.

전역 $ somevar를 수행하면 일반적으로 큰 문제가 아닌 자체 전역 변수를 만드는 것입니다.


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

register_globals = 켜기 :

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

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

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

echo $myinput; // abc

register_globals = 끄기 :

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

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

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

echo $_GET['myinput']; //abc

As I understand it, if you have register globals turned ON, then anything passed in a GET or POST gets automatically translated into a variable in PHP.

for example:

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

without any further coding this would automatically get turned into a variable available to the rest of your php code

$myvar  //with a value of 123

With registered globals OFF, data passed in via GET or POST is NOT automatically translated into a variable, rather, you need to request it using the Superglobals $_GET, $_POST, and $_REQUEST, etc.

http://php.net/manual/en/security.globals.php provides some further information as to the security implications of this.

Others can feel free to correct me if I'm wrong.

edit:

in relation to your question re global $user_id;, this does not create a 'global' in the sense of 'register_globals'. It simply alters the scope of a variable within the PHP code.

For information re scope, see: http://php.net/manual/en/language.variables.scope.php


Register Globals :

register_globals The feature causes data passed to a PHP script via cookies or GET and POST requests to be made available as global variables in the script.

Default Value : "0"

Changeable : PHP_INI_PERDIR

register_globals is affected by the variables_order directive.

NOTE:

This feature has been DEPRECATED as of PHP 5.3.0 and REMOVED as of PHP 5.4.0.


Global variables in php are variables that are always accessible. They are also known as superglobals. They are built in variables that are always available regardless of the scope.

There are nine superglobal variables in PHP. Some of these are relevant to this discussion.

  1. $_REQUEST
  2. $_POST
  3. $_GET
  4. $_COOKIE

Now, let's focus on the $_REQUEST superglobal. It is used to collect data after submitting an HTML form by user using the POST method.

$_POST and $_REQUEST could be used loosely interchangeably. But $_REQUEST also contains $_GET and $_COOKIE along with $_POST so you are never sure if your data came from a web form.

Now, as pointed out by @Tim register_globals is an internal PHP setting which registers the $_REQUEST array's elements as variables. It is also known as a flag in your php setting. It is typically set in the PHP configuration file known as php.ini file. This setting can have two values.

  1. “on”
  2. “off”.

An “on” value means that PHP will automatically create global variables for many server variables as well as query string parameters. This is not good and is a security risk.

참고URL : https://stackoverflow.com/questions/3593210/what-are-register-globals-in-php

반응형