code

PHP에서 register_globals는 무엇입니까?

starcafe 2023. 8. 6. 10:13
반응형

PHP에서 register_globals는 무엇입니까?

누가 어떤 예를 들어줄 수 있습니까?register_globals그래요?
그리고는global $user_id;글로벌 등록으로 간주됩니까?

register_globals지시:

register_globals는 등하는내 PHP 설니다입을 입니다.$_REQUEST배열의 요소를 변수로 사용합니다.양식으로 값을 제출하는 경우,POST또는GET입력 필드의 이름을 따서 명명된 PHP 스크립트의 변수를 통해 해당 입력 값에 자동으로 액세스할 수 있습니다.

다시 말해서, 만약 당신이 다음을 포함하는 양식을 제출했다면,username 필드, 스트필, 식($username === $_POST['username'])의 맨 에 대의맨처다돌것입니다아올시에음본것다▁return▁at니입▁would돌을 반환합니다.true.

특히 보안 관점에서 엄격한 코딩 스타일보다 덜 따르는 사람들에게 보안 구멍이 많이 뚫리기 때문에 악명이 높습니다.

전형적인 예:

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

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

만약 당신이 웹 브라우저에서 그 스크립트를 방문하고 서버가register_globals위에, 당신은 간단히 덧붙일 수 있습니다.?authorized=1URL로 이동하면 god-mode가 활성화됩니다!

global키워드:

global키워드는 register_als와 거의 관련이 없습니다.

사용 예는 다음과 같습니다.

$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];

은 "출은다같습다니과음력▁be▁will다▁the니"가 될 것입니다.asd.

그리고 이것은 심각한 보안 문제와 버그를 야기할 것입니다.저는 최근 Hostgator 공유 호스팅을 사용하는 동안 이런 나쁜 일을 경험했습니다.기본적으로 다음 항목이 있습니다.register_globals=on.

register_propertals=on을 사용하면 GET, POST 또는 COOKE를 통해 전달된 모든 항목이 코드의 글로벌 변수로 자동으로 표시되므로 보안 문제가 발생할 수 있습니다.

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

글로벌 $somevar를 수행할 때는 일반적으로 큰 문제가 되지 않는 자신만의 글로벌 변수를 만드는 것입니다.

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

레지스터_추가 정보=켜기:

Global Arrays(GET[], POST[] 및 REQUEST[]) 없이 폼 속성에 액세스할 수 있습니다.

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

하나로 직접 액세스할 수 있습니다.php

echo $myinput; // abc

register_globals=Off:

모든 특성에는 글로벌 어레이로만 액세스해야 합니다.

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

당신은 하나로 접속해야 합니다. php.p.

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

제가 이해하기로는, 만약 당신이 레지스터 글로벌을 켜면, GET 또는 POST에서 전달된 모든 것이 자동으로 PHP의 변수로 변환됩니다.

예:

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

더 이상 코딩하지 않으면 이것은 자동으로 당신의 php 코드의 나머지 부분에서 사용할 수 있는 변수로 바뀔 것입니다.

$myvar  //with a value of 123

등록된 전역이 OFF인 경우 GET 또는 POST를 통해 전달된 데이터는 자동으로 변수로 변환되지 않으며, Superglobal $_GET, $_POST, $_REQUEST 등을 사용하여 요청해야 합니다.

http://php.net/manual/en/security.globals.php 이에 대한 보안 영향에 대한 몇 가지 추가 정보를 제공합니다.

다른 사람들은 제가 틀리면 자유롭게 고쳐줄 수 있습니다.

편집:

하여 re 관련하여과문질의신당▁to▁in.global $user_id;이것은 'register_deals'의 의미에서 'global'을 생성하지 않습니다.PHP 코드 내 변수의 범위를 변경하기만 하면 됩니다.

자세한 내용은 http://php.net/manual/en/language.variables.scope.php 을 참조하십시오.

php의 전역 변수는 항상 액세스할 수 있는 변수입니다.그들은 슈퍼글로벌이라고도 알려져 있습니다.이러한 변수는 범위에 관계없이 항상 사용할 수 있는 기본 변수입니다.

PHP에는 9개의 슈퍼글로벌 변수가 있습니다.이 중 일부는 이 논의와 관련이 있습니다.

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

이제, 집중적으로 살펴보도록 하겠습니다.$_REQUESTHTML 양식을 사용하여 HTML 양식을 한 후 데이터할 때 합니다.POST방법.

$_POST그리고.$_REQUEST느슨하게 서로 바꿔 사용할 수 있습니다. 하지만.$_REQUEST에는 한포함니다합도 포함되어 있습니다.$_GET그리고.$_COOKIE $_POST따라서 데이터가 웹 양식에서 가져온 것인지 확신할 수 없습니다.

@Tim이 지적한 바와 같이,register_globals는 등하는내 PHP 설니다입을 입니다.$_REQUEST배열의 요소를 변수로 사용합니다.그것은 또한 다음과 같이 알려져 있습니다.flag당신의 php 설정에서.으로 적으로일 PHP 성에설정다로 됩니다.php.ini파일. 이 설정은 두 개의 값을 가질 수 있습니다.

  1. "온"
  2. "꺼짐"

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

전역 등록:

register_globals 이 기능은 쿠키 또는 GET 및 POST 요청을 통해 PHP 스크립트로 전달되는 데이터를 스크립트에서 전역 변수로 사용할 수 있도록 합니다.

기본값: "0"

변경 가능: PHP_INI_PERDIR

register_interals는 variables_order 디렉티브의 영향을 받습니다.

참고:

이 기능은 PHP 5.3.0에서 더 이상 사용되지 않으며 PHP 5.4.0에서 제거되었습니다.

register_alsals는 php.ini 파일의 매개 변수 중 하나입니다.이 파일은 PHP 5.3.8 버전 이전의 "On" 모드에서 제공되었습니다.register_globals를 Off에서 On으로 변경하면 웹 사이트의 취약성에 대한 몇 가지 문제가 발생합니다.Register_globals의 기능은 $_GET 및 $_POST 변수 없이 변수를 사용할 수 있다는 것입니다.따라서 $_GET 또는 $_POST 변수와 같이 변수를 사용할 수 있는 모든 데이터는 필요하지 않습니다.예를 들어 다음과 같은 형식이 있습니다.

<?php 
if(isset($_POST["myinput"])){
        echo $_POST["username"];
    }?>


<form action="" method="post">
    <input type="text" name="username">
    <input type="hidden" name="myinput">
    <input type="submit" value="Submit">
</form>

양식을 제출하면 사용자 이름을 볼 수 있지만 register_globals의 상황을 "On"으로 변경하면 $_POST["username"]를 작성하지 않았습니다. 이 코드를 작성하여 사용자 이름 변수에 직접 액세스할 수 있습니다.echo $username

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

반응형

'code' 카테고리의 다른 글

판다의 사용자 지정 목록에 따라 정렬  (0) 2023.08.06
Google Chrome용 Firebug와 유사한 디버거  (0) 2023.08.06
Python의 랜덤 해시  (0) 2023.08.06
그룹화 기준 및 주문 기준  (0) 2023.08.06
lodash 다중 열 정렬 기준  (0) 2023.08.06