开启open_basedir是限制PHP脚本访问目录范围的核心手段,可通过网站设置页面、php.ini文件、.htaccess文件或PHP-FPM池配置四种方式实现防跨站攻击。

如果您在宝塔面板中托管多个网站,且担心某一网站被入侵后通过PHP脚本读取其他站点文件,需立即配置防跨站攻击机制。开启open_basedir是限制PHP脚本访问目录范围的核心手段。以下是具体配置步骤:
一、通过网站设置页面启用open_basedir
此方法适用于单个网站独立配置,可为每个站点指定专属的根目录权限范围,避免权限过度开放。
1、登录宝塔面板,在左侧菜单点击网站,进入站点列表页。
2、找到目标站点,点击其右侧的设置按钮。
3、在弹出窗口中切换至PHP版本选项卡。
4、向下滚动至防跨站攻击(open_basedir)区域,勾选该复选框。
5、确认右侧显示的路径是否为当前站点根目录(如/www/wwwroot/example.com),若无误则点击提交保存。
二、通过PHP配置文件手动添加open_basedir规则
当需要对特定PHP版本统一控制,或面板界面未生效时,可直接编辑php.ini文件注入open_basedir指令,确保底层解析层强制生效。
1、在宝塔面板左侧点击软件商店,找到已安装的PHP版本,点击其右侧的设置。
2、在PHP设置页中点击配置修改选项卡。
3、在打开的php.ini编辑器中,使用Ctrl+F搜索open_basedir。
4、若存在open_basedir =行且值为空或被分号注释,则取消注释并在等号后填写对应站点根目录,例如:open_basedir = /www/wwwroot/example.com:/tmp/:/proc/。
5、若需允许多个独立站点目录,用英文冒号分隔,如:open_basedir = /www/wwwroot/site1.com:/www/wwwroot/site2.com:/tmp/。
6、点击保存,随后返回PHP设置页点击重启PHP使配置生效。
三、通过.htaccess文件为子目录级应用单独限定
适用于同一主域名下存在多个子目录项目(如/blog/、/api/),需对各子目录实施差异化路径限制,不依赖全局PHP配置。
1、进入目标子目录所在站点的根目录,例如/www/wwwroot/example.com/blog/。
2、新建或编辑.htaccess文件(若不存在)。
3、插入以下内容(以Apache环境为例):
<IfModule mod_php7.c><br> php_admin_value open_basedir "/www/wwwroot/example.com/blog:/tmp:/proc"<br></IfModule>
4、确保该子目录所属站点的PHP运行模式为Apache模式(非PHP-FPM),否则该指令无效。
5、保存文件后,访问该子目录下的PHP脚本,验证是否无法读取上级或其他目录文件。
四、通过PHP-FPM池配置实现进程级隔离
针对使用PHP-FPM的站点,可通过为每个站点分配独立的PHP-FPM池,并在池配置中绑定open_basedir,实现更严格的进程级文件系统隔离。
1、进入宝塔面板软件商店 → 找到已安装PHP版本 → 点击设置 → 切换至PHP-FPM设置选项卡。
2、点击添加站点配置,选择目标站点域名。
3、在弹出编辑框中,于[www]段落下方新增一行:php_admin_value[open_basedir] = /www/wwwroot/example.com:/tmp:/proc。
4、确认路径中不含多余空格,且结尾无需分号。
5、点击保存,然后点击页面顶部的重载PHP-FPM按钮。










