PHP手册指出:
open_basedir(字符串)
将 PHP 可以访问的文件限制在指定的目录树中,包括文件本身。该指令不受安全模式是打开还是关闭的影响。
当脚本尝试访问文件系统时,例如使用 include 或 fopen(),会检查文件的位置。当文件在指定的目录树之外时,PHP 将拒绝访问它。
还有,再远一点...
open_basedir 不仅可以影响文件系统功能;例如,如果 MySQL 配置为使用 mysqlnd 驱动程序,则 LOAD DATA INFILE 将受到 open_basedir 的影响。PHP 的许多扩展功能都以这种方式使用 open_basedir。
然而,这个限制似乎并没有达到套接字操作。在我的服务器上,即使我设置open_basedir
为/home:/tmp
,我仍然可以/run
通过该socket_connect
函数访问下面的套接字文件(请注意,我没有将/var/run
( ) 移动到or/run
下的某个扭曲位置)。/home
/tmp
有没有办法扩展open_basedir
的限制以包含套接字文件* 路径,这样就不可能在/home
and之外打开套接字文件/tmp
?
* 我知道套接字文件并不是真正“打开”的,而是通过socket_connect
函数和bind
系统调用“绑定到”的。但是,因为open_basedir
似乎适用于非文件系统功能......我猜可能有一种方法。