Php wamp服务器如何防止通过点斜杠访问根文件夹上方

Php wamp服务器如何防止通过点斜杠访问根文件夹上方,php,.htaccess,wamp,Php,.htaccess,Wamp,如何阻止根目录上的访问?(按点斜杠) 我可以看到分区中的所有文件 为了测试访问权限,我编写了此脚本并添加了一个向上链接: <?php $PartialPath = @$_GET['p']; if(empty($PartialPath)){ $PartialPath = ''; }else{ $PartialPath = "\\".$PartialPath; } $PartialPath_Root = dirname(__FILE__); $ScanPath = $PartialPath_

如何阻止根目录上的访问?(按点斜杠)

我可以看到分区中的所有文件

为了测试访问权限,我编写了此脚本并添加了一个向上链接:

<?php
$PartialPath = @$_GET['p']; if(empty($PartialPath)){ $PartialPath = ''; }else{ $PartialPath = "\\".$PartialPath; }
$PartialPath_Root = dirname(__FILE__);

$ScanPath = $PartialPath_Root . $PartialPath;
echo 'Scan: ',$ScanPath,'<br><br>';

    $Files_arr = scandir($ScanPath);
    foreach ($Files_arr as $file) {
        if ('.' === $file){}
        else if ('..' === $file){  echo '<a href="?p=',$PartialPath,'../" target="_self">.. GO UP </a><br><br>'; }
        else{ echo $file,'<br>'; }
    }
?>

使用
realpath
函数获取实际路径(不包含任何
),然后检查它是否以root开头:

$real_path=realpath($PartialPath);
if(strpos($real_path, $PartialPath_Root)!==0) die('Directory Traversal Prevented');

通过目录-确保php/wamp运行的用户与admin不同。注意:您的测试没有显示用户可以在第行
http://root/../../
以获取访问权限。只有你的脚本才有访问权限。是的,你是对的,我可以用.htaccess限制php脚本的访问权限吗??“为了测试访问权限,我写了这个脚本”-我不认为OP只是想更改测试,而是想更改他在测试中显示的访问权限。是的,我想将我的文件保留在服务器根目录之外secure@user3820120正如杰夫所说,您可以使用权限使根目录以外的文件保持安全,但编写这样的代码会导致目录遍历,即使使用权限保存外部文件,也会使根目录下的文件面临风险。简单地说,我希望只允许访问根目录。我从测试了一个文本编辑器&我发现它可以在根文件夹之外创建一个新的文本文档。这似乎是一个安全风险。@user3820120是的,这是一个安全风险,但您可以使用类似于我的答案的代码将用户限制到特定目录。
$real_path=realpath($PartialPath);
if(strpos($real_path, $PartialPath_Root)!==0) die('Directory Traversal Prevented');