Nginx PHP 使用 open_basedir 限制站点目录防止跨站
Linux 使用文档
收录了这篇文章

知识回顾:

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

声明:本站所有文章和图片,如无特殊说明,均为原创发布。商业转载请联系作者获得授权,非商业转载请注明出处。
随机推荐
Land APP 小程序
Node.js url 模块
JavaScript 滚动浏览器窗口到指定的元素
JavaScript 检查 Date 是否为 Invalid Date
HTML 对话框元素 dialog
表驱动方法
Express 使用 XSS 模块进行安全过滤
JavaScript ES6 模块