Nginx PHP 使用 open_basedir 限制站点目录防止跨站

知识回顾:

open_basedir是php.ini中的一个配置选项

它可将用户访问文件的活动范围限制在指定的区域,

假设open_basedir=/home/wwwroot/home/web1/:/tmp/,那么通过web1访问服务器的

用户就无法获取服务器上除了/home/wwwroot/home/web1/和/tmp/这两个目录以外的文件。

注意用open_basedir指定的限制实际上是前缀,而不是目录名。

举例来说: 若"open_basedir = /dir/user", 那么目录 "/dir/user" 和 "/dir/user1"都是

可以访问的。所以如果要将访问限制在仅为指定的目录,请用斜线结束路径名。



配置方法:

在 Nginx 虚拟主机的配置文件中加入

fastcgi_param PHP_VALUE "open_basedir=$document_root:/tmp/:/proc/";


server {
  listen 80;
  listen 443 ssl;
  server_name pork.restfulapi.cn;
  root /software/www/cn_restfulapi;

  location ~ \.php$ {
    fastcgi_pass  127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /software/www/cn_restfulapi_pork$fastcgi_script_name;
    include    fastcgi_params;

    fastcgi_param PHP_VALUE "open_basedir=$document_root:/tmp/:/proc/";
    # fastcgi_param PHP_VALUE "open_basedir=/software/www/cn_restfulapi_pork/:/tmp/:/proc/";

    index index.php index.html index.htm;
  }
}


通常 Nginx 的站点配置文件里用了 include fastcgi_params。所以,把这个 PHP_VALUE 放入 /nginx/conf/fastcgi_params。


测试文件

<?php

echo "<pre>";
echo "<br>/software/www<br>";
print_r(scandir("/software/www"));
echo "<br>/software/www/cn_restfulapi_pork<br>";
print_r(scandir("/software/www/cn_restfulapi_pork"));
echo "<br>/software<br>";
print_r(scandir("/software"));
echo "</pre>";




参考:

https://javascript.net.cn/article?id=675

http://blog.chinaunix.net/uid-26729093-id-4780651.html

真诚赞赏,手留余香
赞赏
随机推荐
FTP over TLS加密传输 Filezilla
DedeCMS 织梦常见问题
MySQL 中使用 GROUP BY 对后分组的数据进行 COUNT() 统计
macOS 安装 nginx
Webpack 多页面应用(多 HTML 页面 html-webpack-plugin )
Workerman 实现 WebSocket IM 聊天系统 【前端篇】
JS生成 UUID的四种方法
Express教程1 概述
PHP Xdebug 专题
vue-cli使用