문제

그래서 저는 사용중인 PHP 사이트에서 약간의 유지 관리를하고 있습니다. $_SESSION 변수. 나는 매우 이상한 행동을보기 시작했고 몇 시간 동안 디버깅을 한 후 나는 이것을 알아 냈습니다. 예를 들어, 다음과 같은 세션 변수 설정이 있다고 가정 해 봅시다.

$_SESSION['user']['id'] = 123;
$_SESSION['user']['firstname'] = 'John';
$_SESSION['user']['lastname'] = 'Doe';

스크립트의 어느 시점에서 MySQL 테이블에 대한 호출은 일부 Zend 클래스를 사용하여 이루어집니다.

$sql = "SELECT whatever FROM table";
$user = $db->fetchRow($sql);

이제 여기 기묘함이 시작되는 곳이 있습니다 ...이 데이터베이스 호출이 이루어진 후 $_SESSION['user'] 배열 값은 갑자기 데이터베이스 호출에서 검색된 객체로 변경되었습니다 ...

원래: $_SESSION['user'] 이제 변수에 저장 해야하는 Fetchrow DB 메소드를 사용하여 검색된 객체와 동일합니다. $user. 나는 전에 이것을 본 적이 없다.

내가 알아낼 수있는 유일한 것은 변수 이름 때문입니다. $user 와 동일합니다 $_SESSION['user'] 배열 키 이름, 바로 가기 같은 것처럼 작용합니다.

내가 전에 들어 본 적이없는 이상한 PHP 세션 바로 가기입니까?

참고로, 나는 접근하는 것을 알고 있습니다 $_SESSION VAR은 직접적인 관행이 아닙니다. 나는이 웹 사이트를 만들지 않았다. 내 직업은 단지 물건을 고치고 몇 가지 기능을 추가하는 것입니다.

업데이트: 물론 레지스터 _globals가 켜져 있습니다. 빠른 도움을 주셔서 감사합니다. 내가 그런 이상한 행동을보고있는 것도 당연합니다.

도움이 되었습니까?

해결책

당신이 가진 것 같습니다 register_globals php.ini로 설정하십시오. 끄면 문제가 해결됩니다.

php.ini 변경에 액세스 할 수없는 경우 대체 솔루션에 대해 논의합니다. 여기

다른 팁

확인하는 경우 확인하십시오 글로벌 등록 켜집니다. 접근 $ _session 세션 데이터에 안전하게 액세스하는 유일한 방법입니다.

Register Globals는 글로벌 변수를 로컬 변수로 바꾸는 오래된 기능입니다. 그 문제는 데이터가 어디에서 왔는지 안전하게 알 수 없었습니다. 세션에서 예상 한 내용은 Get, Post 또는 쿠키 변수로 설정할 수 있습니다. 따라서 보안을 우회하는 것은 매우 쉬웠습니다.

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