[关闭]
@zoand 2019-05-19T15:04:19.000000Z 字数 2105 阅读 2265

nginx+php使用open_basedir限制站点目录防止跨站

web linux nginx


以下三种设置方法均需要PHP版本为5.3或者以上。

设置open_basedir的同时最好禁止下执行命令的函数,比如:
shell_exec('ls /etc')仍然查看到/etc目录的文件列表
shell_exec('cat /etc/passwd')仍可查看到/etc/passwd文件的内容

建议禁止的函数如下:
disable_functions = pcntl_alarm, pcntl_fork, pcntl_waitpid, pcntl_wait, pcntl_wifexited, pcntl_wifstopped, pcntl_wifsignaled, pcntl_wexitstatus, pcntl_wtermsig, pcntl_wstopsig, pcntl_signal, pcntl_signal_dispatch, pcntl_get_last_error, pcntl_strerror, pcntl_sigprocmask, pcntl_sigwaitinfo, pcntl_sigtimedwait, pcntl_exec, pcntl_getpriority, pcntl_setpriority, eval, popen, passthru, exec, system, shell_exec, proc_open, proc_get_status, chroot, chgrp, chown, ini_alter, ini_restore, dl, pfsockopen, openlog, syslog, readlink, symlink, popepassthru, stream_socket_server, fsocket, chdir

强制删除.user.ini文件

文件权限被锁定,执行以下命令来解除锁定:

  1. chattr -i /home/wwwroot/baidu.com/.user.ini

然后再用rm -rf命令或者FTP删除就OK了。

chattr

文件可以修改

  1. chattr -i .user.ini

文件不能修改

  1. chattr +i .user.ini

chattr 主要提高文件的安全性。

lnmp环境配置thinkphp5.1.36入口public目录问题

问题:

thinkphp5版本统一把index.php入口放到了 public 子目录中,而lnmp环境中设置有严格的防跨站限权,导致 web 部署到 public 目录不成功。

  1. fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/:/tmp/:/proc/";

在下面增加一行:

  1. fastcgi_param PHP_ADMIN_VALUE $basedir if_not_empty;
  1. include enable-php-pathinfo.conf;

在这一行上面增加一行:

  1. #设置二级目录访问root目录权限
  2. set $basedir "open_basedir=/home/wwwroot/xxx.com:/tmp/:/proc/";
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注