2008-11-03 11 views
2

저는 회사의 새 웹 사이트를 디자인 중이며 과거 내 모든 사이트에서 사용한 스위치 탐색을 구현하려고합니다. 나는을 index.php로 이동 어떤 이유로? X = 제품 아무 일도 발생하지 않습니다를 들어 PHP는 자동으로 변수를 가져옵니다.

<?php 
switch($x) { 

default: 
include("inc/main.php"); 
break; 

case "products": 
include("inc/products.php"); 
break; 

} 
?> 

, 그것은 여전히 ​​URL에서 X 변수를 감지하지 않은 즉 INC/main.php를 표시합니다. 이것은 전역 변수와 관련이 있습니까?

+0

을 사용하는 등 불안한로 만드는 스크립트에서 그들이 원하는 콘텐츠와 사용자 설정 변수를 할 수 있습니다 이 사이트는 큰 사이트이므로 CodeIgniter와 같은 프레임 워크를 사용하는 것이 좋습니다.이 작업은 많은 것을 할 것입니다. 그들이 말하는 것처럼 바퀴를 재발 명하지 마십시오. –

답변

14

예, PHP 구성은 입니다.register_globals이 올바르게 설정되어 있지 않습니다. 믿을 수 없으므로 안전하지 않습니다.

은 그냥 넣어 :

$x = $_REQUEST['x'] 

스크립트의 상단에.

특별히 GET HTTP 메소드에서만 작동하게하려면 $_GET을 사용할 수도 있습니다. 어떤 사람들은 $_REQUEST이 어떻게 든 안전하지 못하다고 주장했지만, 그 증거는 뒷받침 할 증거가 없습니다.

+0

$ _REQUEST가 아닌 $ _GET을 사용하는 것이 더 좋습니다 ... $ _REQUEST는 register_globals만큼 나쁘지는 않지만 여전히 나쁜 냄새를줍니다. 그는 URL var를 사용하고 있으며 쿠키 또는 POST 매개 변수가 뷰 모드를 변경하지 않기를 원하므로 $ _REQUEST가 아닌 $ _GET을 사용해야합니다. – joelhardi

+0

나는 그것이 안전하지 않다고 들었지만, 왜 내가 거의 모든 웹 서버 나 호스팅 패키지를 가지고 있다고 생각 했는가? – zuk1

+0

쿠키가 클라이언트 쪽에서 설정 될 수 있기 때문에 "_ 나쁜 냄새"(SO 주석 문자 제한이 싫음)보다 구체적으로, $ _REQUEST는 XSS 공격을받을 수 있습니다. – joelhardi

1

이러한 변수를 읽으려면 $ _GET을 사용해야합니다. register_globals이라고하는 더 이상 사용되지 않는 기능이 있지만 잠재적 인 보안 위험이 있으므로 꼭 사용해야하는 것은 아닙니다.

5

이전에 사용했던 웹 호스트가 모두 register_globals 인 것으로 보이며 코드에 의존합니다. 이 위험한 설정이며 정당하게 PHP 6.0에서 제거되었습니다! 대신 switch($_GET['x']) {을 사용하십시오.

관련 문제