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.
$_REQUEST
$_POST
$_GET
$_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.
- “on”
- “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
'Programing' 카테고리의 다른 글
/ usr / bin / codesign 명령이 종료 코드 1과 함께 실패했습니다. (0) | 2020.11.30 |
---|---|
SQL Server에서 단일 행 MERGE / upsert 구문 (0) | 2020.11.30 |
Magento 관리자 로그인 페이지의 "오류 404 찾을 수 없음" (0) | 2020.11.30 |
주요 Spark로 여러 출력에 쓰기-하나의 Spark 작업 (0) | 2020.11.29 |
Ubuntu-ssh--경고 : 원격 호스트 ID가 변경되었습니다. (0) | 2020.11.29 |