nginx+php使用open_basedir限制站点目录防止跨站
Nginx+PHP使用open_basedir限制站点目录防止跨站
在Nginx+PHP的环境下,可以通过设置open_basedir来限制站点的目录范围,以此来防止跨站攻击。open_basedir是一个PHP配置选项,它可以限制PHP脚本能够访问的文件系统路径。通过合理配置open_basedir,可以有效地提高LNMP环境下的安全性,防止跨站和跨目录攻击,保护服务器上的各个网站免受潜在威胁。
配置方法
以下是几种常见的配置open_basedir的方法:
方法一:在Nginx配置文件中加入
通常,Nginx的站点配置文件中会包含include fastcgi.conf;这样的语句。在这种情况下,可以在fastcgi.conf文件中加入以下代码:
fastcgi_param PHP_VALUE "open_basedir=$document_root:/tmp/:/proc/";
如果需要为某个站点单独设置额外的目录,可以把上述代码写在include fastcgi.conf;这行代码的下面,这样会覆盖fastcgi.conf中的设置。需要注意的是,这种设置方式需要重启Nginx后才能生效。
方法二:在php.ini中加入
另一种方法是在php.ini文件中加入open_basedir的设置:
``` [HOST=www.server110.com] open_basedir=/home/www/www.server110.com:/tmp/:/proc/
[PATH=/home/www/www.server110.com] open_basedir=/home/www/www.server110.com:/tmp/:/proc/ ```
这种方式的设置需要重启php-fpm后生效。
方法三:在网站根目录下创建.user.ini并写入
还可以在网站根目录下创建一个.user.ini文件,并在其中写入open_basedir的设置:
open_basedir=/home/www/www.server110.com:/tmp/:/proc/
这种方式不需要重启Nginx或php-fpm服务。为了安全起见,应当取消掉.user.ini文件的写权限。
注意事项
open_basedir指定的限制实际上是前缀,而不是目录名。例如,如果open_basedir=/dir/user,那么目录/dir/user和/dir/user1都是可以访问的。- 在设置
open_basedir的同时,最好禁止下执行命令的函数,比如shell_exec('ls /etc')仍然可以查看到/etc目录的文件列表,shell_exec('cat /etc/passwd')仍可查看到/etc/passwd文件的内容。建议禁止的函数如下:。
通过上述方法,可以在Nginx+PHP环境中有效地使用open_basedir来限制站点目录,防止跨站攻击。
