PHP 보안 registerglobals 의 on 과 off 의 차이

1.registerglobals=Off 와 registerglobals=On 의 차이
register_globals 는 php.ini 의 설정 입 니 다.이 설정 은 php 가 전 달 된 인 자 를 어떻게 받 아들 이 는 지 에 영향 을 줍 니 다.
register_globals 의 값 은 On 또는 Off 로 설정 할 수 있 습 니 다.우 리 는 코드 를 들 어 각각 다른 것 을 설명 할 수 있 습 니 다.

<form action='' method='get'>
<input type='text' name='username' value='alex' >
<input type='submit' name='sub' value='sub'>
</form>
<?php
echo 'username::',$username;
echo '<br>sub::',$sub;
echo '<br>GET::';
print_r($_GET);

?>
등록globals=On 을 실행 할 때 출력 결 과 는 다음 과 같 습 니 다.
    username::alex 
    sub::sub  
    array ( [username] => alex [sub] => sub )  
등록globals=Off 시 프로그램 이 출력 결 과 를 다음 과 같이 실행 합 니 다.
  username::  
    sub::  
    array ( [username] => alex [sub] => sub )  
테스트 결 과 를 통 해 알 수 있 습 니 다:registerglobals 는 전역 변수 로 등록 되 어 있 기 때문에 On 에 전 달 된 값 은 전역 변수 로 직접 등 록 됩 니 다.Off 에 서 는 특정한 배열 에서 가 져 와 야 합 니 다.
2.왜 register 를 추천 합 니까globals=Off?
1.PHP 4.2.0 버 전 설정 시작 파일 중 registerglobals 의 기본 값 은 on 에서 off 로 바 뀌 었 습 니 다.On 으로 설정 할 수 있 지만 서버 를 제어 할 수 없 을 때 코드 의 호환성 이 큰 문제 가 되 므 로 지금부터 Off 스타일 로 프로 그래 밍 하 는 것 이 좋 습 니 다.
2.등록globals 가 열 린 후에 각종 변 수 는 코드 에 주입 되 었 습 니 다.예 를 들 어 HTML 폼 에서 온 요청 변수 입 니 다.게다가 PHP 는 변 수 를 사용 하기 전에 초기 화 할 필요 가 없 기 때문에 안전 하지 않 은 코드 를 쉽게 쓸 수 있 습 니 다.열 렸 을 때 사람들 이 변 수 를 사용 할 때 변수 가 어디서 났 는 지 모 르 고 당연 하 다 고 생각 할 수 밖 에 없다.하지만 registerglobals 의 닫 기 는 이러한 코드 내부 변수 와 클 라 이언 트 가 보 낸 변수 가 혼 합 된 나 쁜 상황 을 바 꾸 었 습 니 다.예 원본 매 뉴 얼

<?php 
 
 //         ,   
 
 $authorized = true 
  
 if (authenticated_user()) { 
 
 $authorized=true; 
 
 } 
  
 //          $authorized      false, 
 
 //   register_globals    ,    GET auth.php?authorized=1         
 
 //                
 
 if ($authorized) { 
 
 include"/highly/sensitive/data.php"; 
 
 } 
 
 ?>
등록globals=on 일 때 위의 코드 가 위험 합 니 다.만약 off 라면$authorized 는 URL 요청 등 방식 으로 바 꿀 수 없습니다.변 수 를 초기 화 하 는 것 이 좋 은 프로 그래 밍 습관 임 에 도 불구 하고.예 를 들 어 위의 코드 가 실행 되 기 전에$authorized=false 를 추가 하면 registerglobals 는 on 이 든 off 든 모두 가능 합 니 다.사용자 상태 가 인증 되 지 않 은 상태 로 초기 화 되 었 기 때 문 입 니 다.
3.한 대 에서 register 를 닫 아야 한다 면globals 공유 호스트 에서 구식 프로그램 을 실행 합 니 다.이 옵션 을 사용 하려 면 어떻게 해 야 합 니까?
이 예 시 뮬 레이 션 registerglobals On。설정 파일 의 variables 가 바 뀌 었 다 면order 옵션 을 선택 하면$superglobals 에 대한 변경 을 고려 합 니 다.

<?php// Emulate register_globals on 
 
 if (!ini_get('register_globals')) { 
 
 $superglobals= array($_SERVER,$_ENV,$_FILES,$_COOKIE,$_POST,$_GET); 
 
 if (isset($_SESSION)) { 
 
 array_unshift($superglobals,$_SESSION); 
 
 } 
 
 foreach ($superglobals as $superglobal) { 
 
 extract($superglobal,EXTR_SKIP); 
 
 } 
 
 } 
 
 ?>
4.필요 하 다 면 registerglobals 옵션 의 호스트 에서 보안 위험 을 없 애 려 면 어떻게 해 야 합 니까?
이 예 시 뮬 레이 션 registerglobals Off。이 코드 는 스 크 립 트 의 맨 처음 부분 에서 호출 되 어야 한 다 는 것 을 기억 해 야 합 니 다.세 션 메커니즘 을 사용 하면 sessionstart()이후 호출.

<?php// Emulate register_globals off 
 
 functionun register_GLOBALS(){ 
 
 if (!ini_get('register_globals')) { 
 
 return; 
 
 } 
 
 // Might want to change this perhaps to a nicer error 
 
 if (isset($_REQUEST['GLOBALS']) || isset($_FILES['GLOBALS'])) { 
 
 die('GLOBALS overwrite attempt detected'); 
 
 } 
 
 // Variables that shouldn't be unset 
 
 $noUnset= array('GLOBALS','_GET','_POST','_COOKIE','_REQUEST','_SERVER','_ENV','_FILES'); 
 
 $input=array_merge($_GET,$_POST,$_COOKIE,$_SERVER,$_ENV,$_FILES,isset($_SESSION) &&is_array($_SESSION) ?$_SESSION: array()); 
 
 foreach ($input as $k=>$v) { 
 
 if (!in_array($k,$noUnset) && isset($GLOBALS[$k])) { 
 
 unset($GLOBALS[$k]);  
 
 } 
 
 } 
 
 } 
  
 unregister_GLOBALS(); 
 
 ?>
PHP 보안 에 관 한 registerglobals 의 on 과 off 의 차이 점 에 대한 글 은 여기까지 입 니 다.더 많은 관련 PHP 보안 registerglobals 콘 텐 츠 는 저희 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기