2011-12-28 6 views
0

PHP와 Javascript를 사용하여 작은 파일 찾아보기 스크립트를 만들고 있는데 작은 문제가 있습니다. 현재 디렉터리는 기지에있을 때 index.php?dir=/projects/jphp이라는 URL에 GET으로 저장됩니다. 그때 사용 variabe $scandir이 저장 주 : fiels이 표에 나와있는대로 사용자들이 thorugh 볼 수 있도록은밀한 ../ 실제 디렉토리에 PHP

$scandir = $_GET['dir']; 

, 폴더는 다음과 같이 하이퍼 링크됩니다

<td><a style="color: red;" href="edit.php?pid=<?php echo $project['id'] ?>&dir=<?php echo $scandir . "/" . $thisfile; ?>"><?php echo $thisfile; ?></a></td> 

변수 $thisfile이 채워집니다 디렉토리의 모든 파일을 통과하는 foreach() 루프를 사용합니다.

projects/jphp/js/../js/../../../projects/jphp 

이 유지 할 수있는 방법이 같은
사용자는 폴더와 파일을 검색하기 시작으로 는 파일 주소는 그래서, 예를 들어, 파일을 검색하는 분 후 $_GET['dir']; 지저분한 보이는됩니다 경로로 간단한 경로는 위에있는 동일한 당신이 바닥에 상단을 은밀한 방법을 알고 있다면, 그것은 좋은 것

projects/jphp 

로, 감사합니다! 나는이 사실을 잘 설명하지 못했을 수도 있습니다.

+1

당신이 [RFI]의 의미를 이해해야합니다 (http://de.wikipedia.org/wiki/Remote_File_Inclusion 원격 파일 인 클루 전) – knittl

+0

그래, 나는 동적으로/보안 함의를 고려한 사용자 입력으로하는 것이 좋습니다. – Kzqai

+0

개인적으로 해킹 된 로컬 앱은 문제가 될 수있는 가능성이 있습니다. '로컬 네트워크에서 여기에 액세스하는 것이 좋지만 다른 사용자와 마찬가지로 항상 인터넷에 공개 될 수 있기 때문입니다. 집이나 도로에서 접근하는 것 "등이 있습니다. 그러나 당신이 위험성을 알고있는 한. – Kzqai

답변

2

기능이 realpath()입니다. 당신이 어떤 결과를 얻는하지 않는 경우, 폴더 권한을 확인 :

The running script must have executable permissions 
on all directories in the hierarchy, otherwise 
realpath() will return FALSE. 
+0

하지만 그건 C : \ xampp \ htdocs \ ide \ projects \ jphp를 반환합니다. 차라리 양식 projects/jphp (/ not \를 사용하여) – JustinPGriffen

+1

그냥 슬래시를 역 슬래시로 바꾸십시오. 큰 문제가 아닌 것 같습니다 :) –

+0

Windows로 바꾸기 때문에 \ 그거야. Shai가 말했듯이 단순히 str_replace를 실행하면됩니다. –

0

당신이 &dir=/some/&dir=/some/path/../처럼 링크를 대체 할 수 있다고 생각, 그래서 그냥 /some/path/../에없는 링크,하지만 /some/에, 그들은 동일하다.

UPD : 들어

예 :

<?php 
$dir = $scandir; 
if($dir=='..'){ 
    if($scandir=='' || $scandir=='/'){ 
     // skip this entry using continue or something else 
    } 
    if(substr($scandir,-1)=='/'){ 
     $dir = dirname(substr($scandir,0,-1)).'/';   
    }else{ 
     $dir = dirname($scandir).'/'; 
    } 
    if($dir==''){ 
     $dir = '/'; 
    } 
}else{ 
    $dir = $scandir.'/'.$thisfile; 
} 
?> 
<td><a style="color: red;" href="edit.php?pid=<?php echo $project['id'] ?>&dir=<?php echo $dir; ?>"><?php echo $thisfile; ?></a></td> 
+0

내 대답 업데이트 – Timur

관련 문제