>  기사  >  php教程  >  Register_globals에 대해 자세히 알아보기

Register_globals에 대해 자세히 알아보기

黄舟
黄舟원래의
2016-12-13 17:43:422060검색

register_globals는 dedecms에서 강제로 제한됩니다

register_globals 설정은 PHP 변수 접근 범위를 제어하기 때문에 활성화하면 불필요한 보안 문제가 발생할 수 있으므로 여기서는 웹마스터의 경우 강제로 비활성화합니다. space가 지원하지 않는 경우 웹마스터의 참고를 위해 다음과 같은 방법으로 수정할 수 있습니다.

* 독립형 서버 사용자인 경우 php 구성 파일에서 php.ini를 수정하고 Register_globals=를 변경하면 됩니다. On에서 Register_globals=Off로 설정한 다음 Apache를 다시 시작하세요.

* 가상 호스트 사용자인 경우 공간 제공자에게 최대한 알리거나 ini_set('register_globals', 0).

*웹사이트 디렉토리에 새 .htaccess 파일을 만들고 php_flag Register_globals off를 추가하세요. .htaccess 파일이 이미 있는 경우 끝에 새 줄에 추가하세요. 🎜>* 작동하지 않으면 최후의 수단으로 include/common.inc.php로 이동하여 다음 코드를 삭제하세요(권장되지 않음).

//register_globals를 열면 됩니다. 안전하지 않은 가능성이 많으므로 반드시 닫아야 합니다. php.ini Register_globals must is Off! ' ) } PHP4.2.0 버전부터 php.ini의 Register_globals 설정 옵션이 기본값으로 변경되었습니다. 그러니 지금 Off의 스타일로 프로그래밍을 시작하는 것이 가장 좋습니다!
register_globals의 값은 On 또는 Off로 설정할 수 있습니다. 각각의 차이점을 설명하는 코드를 제공하겠습니다.

코드:





register_globals=Off인 경우 다음 프로그램은 $_GET['user_name'] 및 $_GET[ 'user_pass']를 사용해야 합니다. 전달된 값을 수락합니다. (참고:
의 method 속성이 post인 경우 $_POST['user_name'] 및 $_POST['user_pass']를 사용해야 합니다.)

register_globals=On일 경우 다음 프로그램에서 사용할 수 있습니다. $user_name 및 $user_pass를 직접 사용하여 값을 허용합니다.

register_globals는 이름 그대로 전역변수로 등록한다는 뜻이므로 On일 경우 전달된 값을 전역변수로 직접 등록하여 직접 사용하고, Off일 경우에는 전역변수로 등록해야 합니다. 특정 배열로 이동하여 가져옵니다. 따라서 위와 같이 값을 얻을 수 없는 문제를 겪는 친구는 먼저 Register_globals 설정이 값을 얻는 방법과 일치하는지 확인해야 합니다. (확인하려면 phpinfo() 함수를 사용하거나 php.ini를 직접 확인하면 됩니다.) 무엇이 문제인지 살펴볼까요?

입력한 사용자 이름과 비밀번호가 올바른 경우 웹페이지에 대한 액세스를 인증하는 데 사용되는 다음 PHP 스크립트를 살펴보세요.

// 사용자 이름 확인 및 비밀번호

if ($username == 'kevin' and $password == 'secret')
$authorized = true
?>



위 코드의 문제점은 올바른 사용자 이름과 비밀번호를 제공하지 않고도 쉽게 액세스할 수 있다는 것입니다. 브라우저의 주소 표시줄 끝에 ?authorized=1을 추가하세요. PHP는 양식 제출, URL 쿼리 문자열 또는 쿠키 등 제출된 모든 값에 대해 자동으로 변수를 생성하므로 $authorized가 1로 설정되므로 승인되지 않은 사용자가 보안 제한을 초과할 수 있습니다.
register_globals=off는 주로 보안상의 이유입니다. 동시에 대부분의 프로그램에서는 값을 off로 설정해야 합니다. 이전에는 On 스타일로 작성했는데 스크립트가 많으면 어떻게 해야 하나요? 이전 스크립트가 잘 계획되었고 config.inc.php 파일과 같은 공개 포함 파일이 있는 경우 이 파일에 다음 코드를 추가하여 시뮬레이션하십시오(이 코드는 문제를 100% 해결한다고 보장하지 않습니다. 광범위하게 테스트하지는 않았지만 잘 작동한다고 생각합니다).

코드:

if ( !ini_get("register_globals") )
{

extract($_POST)

extract($ _GET);
추출($_FILES);
추출($_ENV)
추출($_COOKIE); _SESSION) )
{
extract($_SESSION);
}
}
?>



php 정의되지 않은 인덱스 및 정의되지 않은 변수 해결 방법

$act=$_POST['act'];

위 코드를 사용하면 항상
알림: 정의되지 않은 색인: act in F:windsflybookpost.php on line 18

또한 때로는

인용된 콘텐츠
주의사항: 정의되지 않은 변수: 제출...

및 기타 유사한 프롬프트

이유: 정의되지 않은 변수로 인해 발생

해결책:
1) error_reporting 설정:
error_reporting = E_ALL 찾기
error_reporting = E_ALL & ~E_NOTICE로 변경

2 ) Register_globals 설정:
register_globals = 찾기 Off
register_globals로 변경 = On

공지: 정의되지 않은 변수: 9행의 D:PHP5ENOTEADDNOTE.PHP에 이메일
 공지: 정의되지 않은 변수: 9행의 D:PHP5ENOTEADDNOTE.PHP에 있는 제목
참고: 정의되지 않은 변수: D:PHP5ENOTEADDNOTE.PHP 9행에 주석
.....
원래 PHP에서는 변수를 정의할 필요가 없지만, 이럴 때는 어떻게 해야 할까요? C: WINDOWS에서 php.ini를 찾으세요
php.ini의 302번째 줄에서 error_reporting = E_ALL

error_reporting = E_ALL & ~ E_NOTICE로 변경한 다음 apache2.2를 다시 시작하세요
해결 방법: php.ini를 수정하세요.
변경: error_reporting = E_ALL
다음으로: error_reporting = E_ALL & ~E_NOTICE
오류를 표시하지 않으려면 직접 수정:
Display_errors = Off
그렇지 않은 경우 php.ini를 수정할 수 있는 권한이 있으면
ini_set("error_reporting", "E_ALL & ~E_NOTICE")
를 php 헤더에 추가할 수 있습니다.

위에서는 Register_globals에 대해 설명합니다. 심도. 더 많은 관련 내용을 알고 싶으시다면 PHP 중국어 홈페이지(www.php.cn)를 주목해주세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:struts2의 태그 사용다음 기사:struts2의 태그 사용