我需要对文件浏览器进行编码,并希望以动态方式实现它。 (理论上每个文件夹都可以浏览)
为了防止在根文件夹之外访问,我想到了以下概念:
<head>
<script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
</head>
<div id="myDiv" style="width:100%;height:400px;"></div>
转换路径。示例:
根文件夹为realpath
(始终首先通过realpath)。
/var/www
/../
并致电/var/www//../
- &gt; realpath
。/var/
是否以/var/
开头 - &gt; false - &gt;因此许可被拒绝。这里我想到的实现(粗略编码):
/var/www
它似乎工作正常,但我真的想要正确地防止令人讨厌的错误。
有人可以证实我的逻辑吗?
顺便说一句:
在符号链接的情况下,我想我会按照符号链接并在到达目的地时应用$rootFolder = realpath('/var/www/');
function to_absolute_path($relativePath) {
global $rootFolder; // <- i know, globals are evil >:)
$absolutePath = $rootFolder.'/'.$relativePath;
return realpath($absolutePath);
}
function verify_permission($absolutePath) {
global $rootFolder;
if (!$absolutePath) return false;
// strlen($rootFolder) is also cacheable, i'm aware
return substr($absolutePath, 0, strlen($rootFolder)) === $rootFolder;
}
$absolutePath = to_absolute_path($clientRequestedFile);
if (!verify_permission($absolutePath)) {
// Permission denied
}
。