지금까지 파일 브라우저를 만들었지 만 꽤 불안합니다. "? dir = .. /"또는 "? dir = ../../.. /"을 삽입하면 예를 들어서는 안되는 파일을 볼 수 있습니다. 내 코드 :PHP에서 파일 브라우저를 제한/보안 설정
<?php
if(isset($_GET['dir']) && $_GET['dir'] !== "../") {$dir = $basedir.$_GET['dir']."/";} else {$dir = $basedir;}
if ($handle = opendir($dir)) {
if(isset($_GET['dir']) && $_GET['dir'] !== "") {echo "<a href='?dir='>back to root</a>";}
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
if(filetype($dir . $file) == "file") {$filetype = what_suffix($file);} else {$filetype = "-";}
if(filetype($dir . $file) == "file") {$filesize = round(filesize($dir . $file)/1024/1024 ,2)." MB";} else {$filesize = "-";}
if(filetype($dir . $file) == "file") {$filedate = date("d.m.Y H:i:s", filectime($dir.$file));} else {$filedate = "-";}
if(filetype($dir . $file) == "file") {
echo(
"<tr>
<td><a href='?dir="[email protected]$_GET['dir']."&file=".$file."'>".$file."</td>
<td>".$filetype."</td>
<td>".$filesize."</td>
<td>".$filedate."</td>
</tr>"
); } else {
echo(
"<tr>
<td><a href='?dir="[email protected]$_GET['dir']."/".$file."'>".$file."</td>
<td>-</td>
<td>-</td>
<td>-</td>
</tr>"
); }
}
}
closedir($handle);
}
?>
제한 할 수있는 방법이 있습니까? (나는 단지 나무에 대한 나무가 보이지 않는 것 같아요)
자신의 파일 저장소 루트에 추가하고 (http://uk3.php.net/realpath) 그 파일의 루트로 시작하는지 확인하십시오. – halfer
이것은 파일 이름/디렉토리 이름을 통해 XSS에 취약합니다. https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet – Cheekysoft