php 检查open_basedir限制是否有效

6tqwzwtp  于 12个月前  发布在  PHP
关注(0)|答案(4)|浏览(121)

在使用PHPass(http://www.openwall.com/phpass/)时,我收到以下警告:

open_basedir restriction in effect. File(/dev/urandom) is not within the allowed path(s)

字符串
虽然这不是一个大问题(它会依赖于其他东西),但我不希望有这个警告。PHP应用程序应该在不同的服务器上运行,一些用户可以将该路径添加到他们允许的open_basedir路径中,但其他人无法访问该配置。
我的第一个猜测是用is_readable()检查可读性,然而,我仍然得到警告。

**问题:**如何检查某个路径或文件是否已添加到open_basedir路径?

9udxz4iz

9udxz4iz1#

您可以使用ini_get() function读取PHP指令的值:

ini_get('open_basedir')

字符串
如果指令不为空,它应该包含一个字符串,其中有一个或多个路径,路径之间用PATH_SEPARATOR分隔。

ercv8c1e

ercv8c1e2#

您可以使用is_readable并使用@禁用此函数的警告。
如果is_readable返回false,那么你知道它是不可读的。

$readable = @is_readable(..);
if(!$readable) {
    ....not readable
}

字符串

ezykj2lf

ezykj2lf3#

file_exists在目录受限时发出警告。让我们使用它:

function isRestricted($path)
{
    // Default error handler is required
    set_error_handler(null);

    // Clean last error info. You can do it using error_clean_last in PHP 7.
    @trigger_error('__clean_error_info');

    // Testing...
    @file_exists($path);

    // Restore previous error handler
    restore_error_handler();

    // Return `true` if error has occured
    return ($error = error_get_last()) && $error['message'] !== '__clean_error_info';
}

字符串

amrnrhlw

amrnrhlw4#

我现在抑制了从is_readable()发出的警告,尽管我认为这是不好的做法,但它确实有效。

if (@is_readable($file)) {
  ...
}

字符串

相关问题