【问题标题】:Will Setting open_basedir in an .htaccess file completely limit a PHP scripts directory access?在 .htaccess 文件中设置 open_basedir 会完全限制 PHP 脚本目录访问吗?
【发布时间】:2013-10-30 20:51:26
【问题描述】:

我的 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 之外的文件夹?

【问题讨论】:

  • 不应该var/www/vhosts 以斜杠开头:/var/www/vhosts 所以它被解释为绝对文件路径?

标签: php .htaccess security open-basedir


【解决方案1】:

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

更多详情请见http://au2.php.net/basename

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

【讨论】:

    【解决方案2】:

    s/php_flag/php_value/.

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-16
      • 2012-01-12
      • 1970-01-01
      • 1970-01-01
      • 2016-01-18
      • 1970-01-01
      相关资源
      最近更新 更多