2009-09-06 3 views
2

나는 전역 변수를 사용하는 것이 항상 위험하다고 들었습니다. 이것은 Drupal에도 적용됩니까? 다음 예를 참조하십시오.Drupal에서 "글로벌"사용자가 위험합니까?

function myFunction($bla) { 
    global $user; 
    if (isAuthenticated($user->uid)) { 
     print $secretCode; 
    } 

} 

해킹 할 수 있습니까?

답변

4

전역 변수 등 일부 많은 이유, 위험 할 수 있습니다

  1. 클러 네임 스페이스
  2. 그것은 유지 보수를 어렵게하고 monkeypatching을 장려, 전역 변수는 그들이 어디
  3. 에서 변경 될 수 참조 적으로 투명하지 않음
  4. 메모리 관리 언어에서 전역 변수가 메모리 누수의 소스가 될 수 있습니다.
  5. 디버깅을 특히 어렵게 만듭니다 규모가 큰 응용 프로그램/사이트에서는 설정 및 수정 위치를 추적하기가 어려울 수 있습니다.

특히 유스 케이스에 대해 어떤 위협도 없습니다. 괜찮을거야. 매우 겁 먹은 경우 다음과 같이 평가하기 전에 $ user-> uid가 정수인지 확인할 수 있습니다.

function myFunction($bla) { 
    global $user; 
    if(is_int($user->uid)){ 
     if (isAuthenticated($user->uid)) { 
     print $secretCode; 
     } 
    } 
} 

하지만 이것은 아마도 필요하지 않습니다.

+0

내 구체적인 예에서 위험하다는 것을 알고 계십니까? $ user는 내장 변수라는 것을 알고 있습니다. 나는. 나는 그것을 정의하지 않는다. Drupal은 그렇다. – coderama

+0

내 대답이 약간 편집되었습니다. –

+0

질문이 하나 더 있습니다. "해커"가 자신의 uid에 전달할 수있는 방법이 있습니까? 그가 1의 uid를 전달할 수 있다면, 그는 그가 관리자라는 것을 의미합니다. – coderama

0

아니요. session_register를 사용하는 경우 SQL 주입이 가능합니다. 이후 PHP 4에서 고대 방법입니다., 많은 사람들이 여전히 그것을 사용합니다.

관련 문제