2011-11-27 1 views
0

내 PHP 스크립트는 다른 파일의 내용을로드 한 다음 특정 명령을 대체해야합니다. 정적 페이지에서 다음 코드를 사용하면 :PHP 스크립트를 실행하고 데이터를 문자열로 반환하십시오.

$pageName = 'pages/' . $_REQUEST['url'] . '.php'; 

$pageContents = file_get_contents($pageName); 

$IDCODE = $_SESSION['IDCODE']; 

$sql = "SELECT * FROM members WHERE IDCODE = '$IDCODE'"; 
$qry = mysql_query($sql); 

$OK = $qry ? true : false; 

$arr = mysql_fetch_array($qry); 

foreach ($arr AS $key => $val) { 
$pageContents = str_replace('{' . $key . '}', $val, $pageContents); 
} 

그러나 처리 할 파일이 동적 인 경우 어떻게해야합니까? IE는 mysql 데이터베이스의 일부 텍스트를 채 웁니다.

file_get_contents가 파일을 실행하거나 문자열로 whats를 읽습니까?

+2

전체 URL (예 :'file_get_contents ('http://yoursite.com/pages/'. $ _REQUEST [ $ _REQUEST [ 'url']가 삭제되고 유효성이 확인되지 않으면 보안상의 위험이 따릅니다. – drew010

답변

0

웹 서버를 통해 파일에 대한 링크를 실행하면 처리됩니다. 직접 링크하면 파일의 정확한 내용을 얻을 수 있습니다.

0

오히려 지저분한 코드.

$ pageName = 'pages /'. $ _REQUEST [ 'url']. '.php';

$ pageContents = file_get_contents ($ pageName);

여기에 로컬 파일 포함 취약점이 있습니다.

$ OK = $ qry? 허위 사실;

왜? anywere 당신은 $ qry를 똑같이 사용할 수있는 $ OK의 값을 사용합니다. 그리고 코드에서 다시 $ OK를 사용하지 마십시오.

오류 검사가없고 코드에 주석이 없습니다.

처리 할 파일이 동적 인 경우 어떻게됩니까?

WTF? 출력을 PHP로 다시 처리 하시겠습니까? 그러면 eval ($ pageContents); 그러나 코드 삽입 취약점에주의하십시오.

또는 스크립트를 PHP scrpt의 출력에 적용 하시겠습니까? 그런 다음 file_get_contents()에 인수로 URL을 전달하십시오.

file_get_contents('http://localhost/path/' 
     . basename($_REQUEST['url'] . '.php'); 

하지만 실제로는 호출이 이보다 잘 제어되어야합니다. 두 가지 모두 지저분한 솔루션입니다. 템플릿 솔루션 만 있으면됩니다. (예를 들어) smarty를 오랫동안 열심히 살펴보십시오.

+0

나는 전에 smarty를 사용 했었지만 나중에 $ OK하지만 저는 방금했습니다. 나는 $ OK에 영향을 미치는 다른 오류 검사가 있습니다. require ($ pageName)를 사용하여 시도하고 잘 작동합니다. – swg1cor14