4

首先让我说我知道这被问了很多。不过,没有什么能真正回答我的问题。

脚本小子通过点击 url 来寻找管理路径

mysite.com/index.php/admin/login

主文件正在拦截他们的请求并查看他们是否要求提供真实文件。这在未配置 open_basedir 的服务器上被拒绝,没有警告,这是正确的行为。不幸的是,在我们使用 open_basedir 的服务器上,file_exists 函数会抛出警告。

我已经把它缩小到一个简单的例子。

将其放入 index.php 并更改 php 文件所在文件夹的路径

<?php
ini_set('open_basedir', '/path/to/files');

var_dump(
    ini_get('open_basedir'), // make sure the config took hold
    file_exists(realpath('index.php').'/') 
);

现在您会看到一个警告,例如

Warning: file_exists() [<a href='function.file-exists'>function.file-exists</a>]: open_basedir restriction in effect. File(/path/to/files/index.php/) is not within the allowed path(s): (/path/to/files) in /path/to/files/index.php on line

编辑:

应该注意的是,请求一个不存在的带有斜杠的文件不会导致警告。

var_dump('/path/to/files/bogus.php/');

将不会导致任何警告并返回 false ,这是预期的。

为了澄清我的问题,为什么会发出警告,我可以避免它吗?

第二次编辑:

我正在运行 php 版本 5.3.3-7+squeeze17 我将很快在新版本中尝试

4

1 回答 1

1

这种确切的行为在 PHP 5.2.2 - 5.2.3 中被报告为一个错误:

https://bugs.php.net/bug.php?id=41518

然后在 5.3.3.7 - 5.4.17 中报告为存在。

https://bugs.php.net/bug.php?id=53041

结论是它似乎是一个错误。

于 2014-03-13T01:54:55.317 回答