3

我的 PHP 脚本使用 $_POST['fileUrl']; 为用户检索文件,我认为这会构成安全威胁,因为任何人都可以将“../../”等附加到 fileUrl 以访问我服务器上的其他文件。

我需要找到最好(最安全)的方法来限制我的脚本可以访问特定目录的文件。从我读过的内容来看,设置 open_basedir 标志将限制我的脚本对指定路径的访问。

脚本.php

$fileUrl = $_POST['fileUrl'];
$content = chunk_split(base64_encode(file_get_contents($fileUrl))); 

.htaccess

php_flag open_basedir  "var/www/vhosts/mydomain.com/php_can_only_access_files_in_this_directory/"

有一个更好的方法吗?这个脚本是否完全可以安全地访问 open_basedir 之外的文件夹?

4

2 回答 2

1

如果您想避免人们通过在文件名中使用 ../../ 来执行目录遍历攻击,您最好在用户提供的输入上调用 basename 以仅将其剥离为文件名。

有关详细信息,请参阅http://au2.php.net/basename 。

值得注意的是 open_basedir 标志只影响检查它的函数,过去有几种情况下 php 函数会忽略 open_basedir 标志,特别是在诸如 imagemagick 之类的扩展中。因此,您应该依靠安全编码实践和文件权限来限制对文件的访问。

于 2014-01-07T00:31:04.130 回答
1

s/php_flag/php_value/.

php_flag 在 open_basedir 确实有效时并不能始终如一地工作。php_flag 用于标志,php_value 用于值。“路径/:另一个/路径/”是一个值。

于 2015-12-16T10:36:06.853 回答