首先让我说我知道这被问了很多。不过,没有什么能真正回答我的问题。
脚本小子通过点击 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 我将很快在新版本中尝试