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개의 슈퍼글로벌 변수가 있습니다.이 중 일부는 이 논의와 관련이 있습니다.
$_REQUEST$_POST$_GET$_COOKIE
이제, 집중적으로 살펴보도록 하겠습니다.$_REQUEST가 HTML 양식을 사용하여 HTML 양식을 한 후 데이터를 할 때 합니다.POST방법.
$_POST그리고.$_REQUEST느슨하게 서로 바꿔 사용할 수 있습니다. 하지만.$_REQUEST에는 한포함니다합도 포함되어 있습니다.$_GET그리고.$_COOKIE $_POST따라서 데이터가 웹 양식에서 가져온 것인지 확신할 수 없습니다.
@Tim이 지적한 바와 같이,register_globals는 등하는내 PHP 설니다입을 입니다.$_REQUEST배열의 요소를 변수로 사용합니다.그것은 또한 다음과 같이 알려져 있습니다.flag당신의 php 설정에서.으로 적으로일 PHP 성에설정다로 됩니다.php.ini파일. 이 설정은 두 개의 값을 가질 수 있습니다.
- "온"
- "꺼짐"
"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 |