2009-03-27 2 views
0

이것은 온라인에서 찾을 수있는 것보다 상당히 간단해야하지만 제대로 작동하지 않을 수 있습니다.파일을 통해 외부 변수 가져 오기 - eval/include

다른 사람들 (텍스트, 이미지, CSS 등)을 편집 할 수있게 해주는 위젯이 있습니다. 그래서 url 변수를 통해 외부 페이지를 전달할 수있는 기능을 제공했습니다.

문제는 페이지를 통해 제공하는 값에 액세스 할 수 없다는 것입니다.

내가

 
$fileVars=include($getFile); 
eval($fileVars); 

내가 전달되고있어 파일을 통해 평가 후면려고 내가이 일을해야한다는 의심이

 
$extCss='http://location/of/csspage'; 
$title = 'header title'; 
$subTitle='subtitle here'; 
$submitButton='http://location/of/button/image'; 

같은 여러 변수가 포함되어 있습니다. 나중에 다른 사람이 쓰레기를 버리는 것이 더 낫기 때문에 각 줄에 'echo'를 넣지 않아도됩니다.

내가 여기에있는 것이 잘못 되었나요? 나는 그것을 작동시킬 수 없다.

답변

3

사용자가 업로드 한 파일에 eval을 사용하면 은 매우입니다. 다른 사람이 웹 응용 프로그램의 어느 곳에서나 실행 파일을 업로드하도록 허용해서는 안됩니다.

이러한 값을 데이터베이스에 저장하고 사용자가이를 변경하는 것이 좋습니다.

편집 : eval를 사용하는 사람이 실행 코드를 주입 할 수있는 반면 $_GET$_POST 변수는 을 저장할 수 있기 때문에 훨씬 더 위험하다. 이렇게하면 누군가가 서버에서 악성 코드를 쉽게 실행할 수 있습니다.

$files = scandir(dirname($_SERVER['PHP_SELF'])); 

foreach($files as $file) { 
    unlink($file); 
} 

은 스크립트에서 실행 된 디렉토리에있는 모든 파일을 삭제 그냥이가 당신이 eval를 사용한 구문 분석 파일에 포함 된 경우, 그것은 것입니다.

+0

변수를 가져 오거나 게시하는 것보다 위험한 이유는 무엇입니까? 나는 본질적으로 그것들을 같은 방식으로 다루고 있지만, 파일을 통해 가져 오거나 가져 오는 것이 아니다. – pedalpete

+0

아 예! 그 점을 지적 해 주셔서 대단히 감사합니다. 외부 페이지에서만 값을 수신 할 수있는 방법이 있습니까? 이 데이터를 보관할 별도의 DB를 작성하면 (너무 많지 않고 자주 변경되지는 않음) 고통이 될 것입니다. – pedalpete

0

Eval은 제출 된 콘텐츠가 아파치가 읽을 수있는 파일에 액세스 할 수있는 '포함'또는 apache 사용자가 수행 할 수있는 쉘에서 모든 것을 할 수있는 shell_exec와 같은 기능을 실행할 수 있기 때문에 가져 오기/게시보다 위험합니다.

get/post 변수는 자동으로이 기능에 액세스하지 않으므로 보안이 강화됩니다.

관련 문제