检查路径的权限

时间:2016-12-23 13:05:46

标签: php

我需要对文件浏览器进行编码,并希望以动态方式实现它。 (理论上每个文件夹都可以浏览)

为了防止在根文件夹之外访问,我想到了以下概念:

  • 客户永远不会看到绝对路径。
  • 客户端始终请求相对路径。
  • 服务器将根文件夹附加到相对路径,并使用<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
  • 服务器附加根文件夹 - &gt; /../并致电/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 }

0 个答案:

没有答案