Nginx防跨目录与跨站配置方法

Nginx有一个缺陷,就是没有像apache的php_value_basedir给我们限制php文件访问目录,PHP低版本下,fastcgi 模式

下open_base设置无效,PHP在PHP5.3.3以上已经增加了HOST配置,可以起到防跨站、跨目录的问题

如果你是PHP 5.3.3以上的版本,可以修改/usr/local/php/etc/php.ini在末尾里加入:

[HOST=111cn.net]

 代码如下 复制代码

open_basedir=/home/wwwroot/111cn.net/:/tmp/
[PATH=/home/wwwroot/111cn.net]
open_basedir=/home/wwwroot/111cn.net/:/tmp/

修改好了。

最后重启下php-fpm:sudo /etc/init.d/php-fpm restart

OK,。这样设置后。就能增强系统的安全性,PHP目前,折腾也只能在他所在的目录下设置啦

如果你不是php5.3.3以上版本我们就只能如下操作了

1、解压php源代码不细说了。

2、执行编译./configure -- (自带参数)

3、修改源代码。此文件位于main/fopen_wrappers.c

 代码如下 复制代码

/* {{{ php_check_open_basedir
*/
PHPAPI int php_check_open_basedir_ex(const char *path, int warn TSRMLS_DC)
{
/* Only check when open_basedir is available */
if (PG(open_basedir) && *PG(open_basedir)) {
  char *pathbuf;
  char *ptr;
  char *end;

  /*添加开始,  add by http://www.111cn.net */
  char *env_doc_root;
  if(PG(doc_root)){
   env_doc_root = estrdup(PG(doc_root));
  }
  else{
   env_doc_root = sapi_getenv("DOCUMENT_ROOT", sizeof("DOCUMENT_ROOT")-1 TSRMLS_CC);
  }
  if(env_doc_root){
   int res_root = php_check_specific_open_basedir(env_doc_root, path TSRMLS_CC);
   efree(env_doc_root);
   if (res_root == 0) {
    return 0;
   }
   if (res_root == -2) {
    errno = EPERM;
    return -1;
   }
  } 
  // 添加的内容结束

  pathbuf = estrdup(PG(open_basedir));
  ptr = pathbuf;
  while (ptr && *ptr) {
   end = strchr(ptr, DEFAULT_DIR_SEPARATOR);
   if (end != NULL) {
    *end = '';
    end++;
   }
   if (php_check_specific_open_basedir(ptr, path TSRMLS_CC) == 0) {
    efree(pathbuf);
    return 0;
   }
   ptr = end;
  }
  if (warn) {
   php_error_docref(NULL TSRMLS_CC, E_WARNING, "open_basedir restriction in effect. File(%s) is not

within the allowed path(s): (%s)", path, PG(open_basedir));
  }
  efree(pathbuf);
  errno = EPERM; /* we deny permission to open it */
  return -1;
}
/* Nothing to check... */
return 0;
}
/* }}} */

然后执行

 代码如下 复制代码

make ZEND_EXTRA_LIBS='-liconv' make install
cp php.ini-dist /usr/local/php/etc/php.ini最后修改php.ini中的open_basedir改为:open_basedir =

"/var/tmp/:/tmp/"

时间: 2024-08-22 15:05:49

Nginx防跨目录与跨站配置方法的相关文章

Nginx和Apache几种防盗链配置方法实例_nginx

要实现防盗链,我们就必须先理解盗链的实现原理,提到防盗链的实现原理就不得不从HTTP协议说起,在HTTP协议中,有一个表头字段叫 referer,采用URL的格式来表示从哪儿链接到当前的网页或文件.换句话说,通过referer,网站可以检测目标网页访问的来源网页,如果是资源 文件,则可以跟踪到显示它的网页地址.有了referer跟踪来源就好办了,这时就可以通过技术手段来进行处理,一旦检测到来源不是本站即进行阻止或者返 回指定的页面. Nginx防盗链的配置 1.nginx针对文件类型的防盗链配置

不让tomcat显示目录文件列表的配置方法

 这篇文章主要介绍了不让tomcat显示目录文件列表的配置方法,这里需要修改conf/web.xml文件,需要的朋友可以参考下 修改conf/web.xml文件(把listings的参数改为false)    代码如下: <servlet> <servlet-name>default</servlet-name> <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-cl

Nginx下WEBshell跨站配置方法

作者亲测,需要更改php源程序后,重新编译php.在使用fpm方式安装时,打补丁过程中会修改php的文件,所以需要在打完fpm补丁后再修改php源程序. tar zxvf php-5.2.14.tar.gz gzip -cd php-5.2.14-fpm-0.5.14.diff.gz | patch -d php-5.2.14 -p1 cd php-5.2.14/  代码如下 复制代码 vi  main/fopen_wrappers.c /* {{{ php_check_open_basedir

Apache防DDOS模块mod_evasive安装和配置方法详解_Linux

一.mod_evasive 介绍mod_evasive 是Apache(httpd)服务器的防DDOS的一个模块.对于WEB服务器来说,是目前比较好的一个防护DDOS攻击的扩展模块.虽然并不能完全防御DDOS攻击,但在一定条件下,还是起到缓服Apache(httpd)服务器的压力.如配合iptables.硬件防火墙等防火墙设备配合使用,可能有更好的效果.mod_evasive 的官方地址: http://www.zdziarski.com/二.mod_evasive 工作原理Apache模块mo

详解Nginx与Apache共用80端口的配置方法_nginx

一个典型的 Nginx + Apache 应用方案可以是Nginx 占用 80 端口,过滤静态请求,然后动态请求即 Proxy 到 Apache 的 8080 端口.Proxy 反向代理的好处是访问的时候,始终就是 80 端口,来访者不会觉察到有任何的区别. 但有的应用确非常"聪明",识别到 Apache 所位于的端口是 8080 ,就会把相关的超链接都一并加上 :8080 的后续.这么就死定了,还能有正常访问麽?! 有个方法可以解决这事,就是把 apache 也运行在80端口上.同一

lnmp中禁止nginx上传目录的PHP执行权限方法

建议将网站目录的PHP权限去掉,当访问上传目录下的php文件时就会返回403错误.下面VPS侦探详细介绍如何把lnmp环境下去掉指定目录的PHP执行权限. 首先要编辑nginx的虚拟主机配置,在fastcgi的location语句的前面按下面的内容添加: 1.单个目录去掉PHP执行权限  代码如下 复制代码 location ~ /attachments/.*.(php|php5)?$ { deny all; } 将attachments目录的PHP执行权限去掉. 2.多个目录去掉PHP执行权限

Nginx实现网站多机负载均衡配置方法

Nginx的高并发特性就不用多说了,单机静态并发能承受大压力测试,但并不代表在搭载后端的情况下依然保持高并发,因为后端动态处理才是并发瓶颈.nginx作者初衷是为邮件提供多机反向代理,而这特性也正好能用在其他网络服务上,因为这是nginx原生基础服务,比apache等其他服务器需提供外部插件的实现形式显得更快捷高效. 传统负载均衡的方法是在后端服务器前设置一台前端服务器负责总调度,这是最简单的方式,当前端搭载的是nginx负责单点均衡,后端服务可以是任意web服务,譬如apache,tomcat

Nginx服务器对数据传输速度限制的基本配置方法讲解_nginx

注意: nginx 1.1.8 之后的版本的语法改为limit_conn_zone $binary_remote_addr zone=NAME:10m; NAME 就是 zone 的名字详情请看这里 http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html 限制连接数: 要限制连接,必须先有一个容器对连接进行计数,在http段加入如下代码: "zone=" 给它一个名字,可以随便叫,这个名字要跟下面的 limit_con

Nginx的http和https(ssl)共存配置方法

因为公司项目有需要用到https的链接,就去弄了个证书,配置上之后,https可以正常访问,但是之前的http的都是显示400错误,nginx的配置如下:  代码如下 复制代码 server {             listen 80 default backlog=2048;             listen 443;             server_name 111cn.net;             root /var/www/html;             ssl o