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

真诚赞赏,手留余香
赞赏
随机推荐
Windows无法删除文件夹 系统找不到指定文件
JSON Web Token 简介和实现
js获取url参数值的两种方式
使用 SuperTest 做 Node.js API 接口单元测试
如何选择开源许可证?
Node.js 使用 Jest 做单元测试
Node.js 递归遍历目录
vue-router的几种使用方式
响应式设计-VS-REM布局
Nginx NJS 模块,在 Nginx 中运行 JavaScript
QQ号

微信联系我

夜间模式切换
回到顶部