2011-12-28 20 views
0

我正在使用PHP和Javascript製作一個小文件瀏覽腳本,並且我遇到了一個小問題。當前目錄存儲在URL中的GET爲index.php?dir=/projects/jphp。然後我用這個存儲在variabe $scandir祕密../進入真實目錄PHP

$scandir = $_GET['dir']; 

爲fiels都在表中列出,以便用戶可以關注一下thorugh它們,文件夾超鏈接是這樣的:

<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()循環。
用戶開始瀏覽文件夾和文件,文件地址就會變得混亂如此,例如,瀏覽文件的一分鐘之後,$_GET['dir'];貌似

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

有沒有什麼辦法讓路徑很簡單,因爲上面的路徑是完全一樣的

projects/jphp 

如果你知道如何將頂部轉換爲底部,那將是非常好的,謝謝!我可能沒有解釋清楚,所以讓我知道你我沒有道理。

+1

,請務必瞭解的[RFI]的影響(http://de.wikipedia.org/wiki/Remote_File_Inclusion遠程文件包含) – knittl 2011-12-28 14:13:25

+0

是的,我建議不要動態/用戶輸入考慮安全影響。 – Kzqai 2011-12-28 16:19:25

+0

就我個人而言,我發現本地應用程序一起入侵有可能成爲問題,因爲他們總是可以成爲互聯網公衆,如果有人像「好的,在本地網絡上訪問它是好的,但我真的很喜歡從家中或在路上訪問它「等等。但只要你意識到危險。 – Kzqai 2011-12-30 19:18:21

回答

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。我寧願它在表格項目/ jphp(與/不\ \) – JustinPGriffen 2011-12-28 13:57:34

+1

只是用反向斜槓替換正斜槓......事情似乎沒有什麼大不了:) – 2011-12-28 14:12:37

+0

它將其更改爲\因爲這是Windows可以。正如Shai所說,只需做一個'str_replace'。 – 2014-07-14 20:22:18

0

我認爲你可能會取代你的鏈接像&dir=/some/path/../&dir=/some/,所以只是鏈接不/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 2011-12-28 14:11:35