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
*/
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;

// 添加的内容开始

               char *env_document_root = sapi_getenv("DOCUMENT_ROOT", sizeof("DOCUMENT_ROOT")-1 TSRMLS_CC);
                if (php_check_specific_open_basedir(ptr, path TSRMLS_CC) == 0) {
                        efree(env_document_root);
                        return 0;
                }

                // 添加的内容结束

                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;
}

在5.3.3以上已经增加了HOST配置,可以起到防跨站、跨目录的问题。如果你是PHP 5.3.3以上的版本,可以修改/usr/local/php/etc/php.ini在末尾里加入:

 代码如下 复制代码

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

然后重启nginx和php-fpm

然后用中国菜刀等工具测试即可发现Nginx已经支持防跨站

小提示,如果你网站没有大量的流量或html静态页面,我还是建义你使用apache来实配置网站,这样就不存在此问题了。

时间: 2024-09-20 09:08:51

Nginx下WEBshell跨站配置方法的相关文章

Nginx下WebShell跨站的问题解决方法

nginx用于大型网站,但是也有一个很大的问题那就是跨域问题,下面我们来看看关于修改php教程源码来解决跨域的问题.下面来看方法. google搜之有两个比较广为流传的方法,其中最完美的莫过于直接修改php源代码,对打开目录进行鉴权(搜出来的资料最早是anxsoft.com提供的代码). 因为需要更改php源程序后,重新编译php.在使用fpm方式安装时,打补丁过程中会修改php的文件,所以需要在打完fpm补丁后再修改php源程序. tar zxvf php-5.2.14.tar.gz gzip

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.ne

Nginx中php-fpm进程目录权限防跨站配置

Nginx下开多个虚拟机网站防跨站是首要的任务,PHP5.3之前的版本不支持open_basedir,只能通过控制PHP-cgi进程及目录用户权限进行限制,防止跨站访问. 先了解一下网站正常运行所用到的用户.目录权限: Nginx进程运行用户:接收用户请求,处理静态文件,如果是PHP则转给PHP-CGI处理,网站目录拥有读权限. PHP-cgi进程用户:处理PHP文件,网站目录拥有读权限,个别目录需要写入权限. 让每个网站使用单独的PHP-CGI进程,创建PHP-FPM配置文件,修改以下:  

linux服务器下LNMP安装与配置方法

现在很多朋友都选择了linux服务器下配置LNMP(linux+nginx+mysql+php),这里分享下LNMP安装与配置方法,需要的朋友可以参考下   Nginx与apache.lighttp性能综合对比,如下图: 注意:关闭rpm默认安装的apache和mysql 1.准备php函数的rpm包 yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-de

让你提前认识软件开发(51):VC++集成开发环境中Linux下Pclint工程的配置方法及常见错误修改

第3部分 软件研发工作总结 VC++集成开发环境中Linux下Pclint工程的配置方法及常见错误修改   [文章摘要]         Pclint是一种C/C++软件代码静态分析工具.它是一种更加严格的编译器,能够发现普通编译器所不能发现的代码中的很多问题,因此被广泛应用于软件开发项目中.        本文介绍了如何在VC++集成开发环境中配置Linux下的Pclint工程,给出了C语言中pclint规则A检查的常见错误,并描述了对应的修改办法.   [关键词]          VC++

Ubuntu下Telnet服务器的配置方法_Linux

1. 首先介绍linux中的守护进程 在Linux系统中有一个特殊的守护进程inetd(InterNET services Daemon),它用于Internet标准服务,通常在系统启动时启动.通过命令行可以给出inetd的配置文件,该配置文件列出了inetd所提供的服务清单.如果没有在命令行给出配置文件,那么inetd将从文件/etc/inetd.conf中读取它的配置信息.inetd的主要任务是为那些没有在系统初始化时启动的服务器进程监听请求,它在同配置文件中列出的服务相关联的TCP或UDP

linux服务器下LNMP安装与配置方法_Linux

Nginx与apache.lighttp性能综合对比,如下图: 注意:关闭rpm默认安装的apache和mysql 1.准备php函数的rpm包 yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel b

window7下Tomcat7.0安装配置方法_Tomcat

因为已经安装过jdk1.6,并且jdk的环境变量已经配置完成. 下面主要讲述Tomcat7.0的安装过程: 1.首先在http://tomcat.apache.org/download-70.cgi中下载"32-bit/64-bit Windows Service Installer" 1).一直下一步,中间需要选择安装路径和 JVM 目录,如果JDK和JRE安装没问题,这里他应该能自动找得到,否则需要你手动指定一下. 中间什么也不用管,有一部让你设置端口,不用动,保持默认的就行了.

LNMP下防跨站、跨目录安全设置,仅支持PHP 5.3.3以上版本

如果你是PHP 5.3.3以上的版本,可以修改/usr/local/php/etc/php.ini在末尾里加入:  代码如下 复制代码 [HOST=www.vpser.net] open_basedir=/home/wwwroot/www.vpser.net/:/tmp/ [PATH=/home/wwwroot/www.vpser.net] open_basedir=/home/wwwroot/www.vpser.net/:/tmp/ 按上面的这个例子修改,换成你自己的域名和目录,多个网站就按上