문제

나는 표준 사용 관행이었을 때 다시 작성된 일부 레거시 PHP 코드를 상속받았습니다. register_globals (PHP 4.2.0부터 이 지시문의 기본값은 off이며 22가 릴리스되었습니다.2002년 4월).

이제 우리는 이 기능을 활성화하는 것이 보안에 좋지 않다는 것을 알고 있습니다.문제는 코드에서 사용해야 하는 모든 위치를 어떻게 찾는가입니다. $_GET 또는 $_POST?내 유일한 생각은 초기화되지 않은 변수에 대해 경고하도록 오류 보고를 설정한 다음 사이트의 각 부분을 테스트하는 것이었습니다.더 쉬운 방법이 있나요?사이트의 각 코드 경로를 테스트해야 합니까? 아니면 PHP가 파일 단위로 경고를 표시합니까?

도움이 되었습니까?

해결책

오류 보고를 E_ALL로 설정하면 파일 이름과 줄 번호가 포함된 정의되지 않은 변수에 대해 오류 로그에 경고합니다(파일에 로깅한다고 가정).하지만 정의되지 않은 변수를 발견한 경우에만 경고하므로 각 코드 경로를 테스트해야 할 것 같습니다.명령줄에서 PHP를 실행하는 것도 도움이 되지 않는 것 같습니다.

xdebug라는 디버깅 도구가 있는데 사용해 본 적은 없지만 유용할 수 있을까요?

다른 팁

나는 썼다 스크립트 내장을 사용하여 토크나이저 기능.꽤 거칠었지만 제가 작업하고 있던 코드 베이스에서는 작동했습니다.나는 당신도 사용할 수 있다고 믿습니다 코드스니퍼.

레지스터 전역 효과를 수동으로 '가짜'로 만들 수 있지만 일부 보안을 추가할 수 있습니다.(저는 이것을 xoops라는 osCommerce 포크에서 부분적으로 가져왔습니다)

//  Detect bad global variables
$bad_global_list = array('GLOBALS', '_SESSION', 'HTTP_SESSION_VARS', '_GET', 'HTTP_GET_VARS', '_POST', 'HTTP_POST_VARS', '_COOKIE', 'HTTP_COOKIE_VARS', '_REQUEST', '_SERVER', 'HTTP_SERVER_VARS', '_ENV', 'HTTP_ENV_VARS', '_FILES', 'HTTP_POST_FILES');
foreach ($bad_global_list as $bad_global ) {
    if ( isset( $_REQUEST[$bad_global] ) ) {
        die('Bad Global');
    }
}

//  Make global variables
foreach ($_REQUEST as $name -> $value) {
    $$name = $value; // Creates a varable nammed $name equal to $value.
}

코드를 더 안전하게 만들기 위해 이를 조정하고 싶을지라도 적어도 전역 구성 변수(경로 및 기본 URL과 같은)를 잘못된 전역 목록에 추가하면 됩니다.

또한 이를 사용하여 사용된 모든 get/post 변수 목록을 쉽게 컴파일하여 $return_url과 같은 모든 항목을 $_REQUEST['return_url];로 대체하는 데 도움을 줄 수도 있습니다.

특정 명령을 사용하여 해당 스크립트에 대한 php.ini 값을 설정하는 방법이 있다는 것을 알고 있으므로 찾아보면서 이것도 발견했습니다. 페이지의 마지막 게시물로 이동

나는 또한 유용할 수 있는 다음 게시물을 찾았습니다. 페이지의 마지막 게시물로 이동

아무도 답을 찾지 못했다면 여기에 더 추가하겠습니다. 하지만 이제 기차를 타야 합니다.

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