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

nginx用于大型网站,但是也有一个很大的问题那就是跨域问题,下面我们来看看关于修改php教程源码来解决跨域的问题。下面来看方法。

google搜之有两个比较广为流传的方法,其中最完美的莫过于直接修改php源代码,对打开目录进行鉴权(搜出来的资料最早是anxsoft.com提供的代码)。

因为需要更改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_ex方法,在char *end;和pathbuf = estrdup(pg(open_basedir));之间插入以下的代码:

 

        char path_copy[maxpathlen];
        int path_len;
        path_len = strlen(path);
        if (path_len >= maxpathlen) {
            errno = eperm;
            return -1;
        }
        if (path_len > 0 && path[path_len-1] == php_dir_separator) {
            memcpy(path_copy, path, path_len+1);
            while (path_len > 1 && path_copy[path_len-1] == php_dir_separator) path_len--;
            path_copy[path_len] = '';
            path = (const char *)&path_copy;
        }

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

然后编译安装php。

并php.ini的open_basedir配置
open_basedir = "/tmp/:/var/tmp/"

这样就彻底解决了,webshell跨站点目录访问问题

时间: 2024-09-20 12:01:17

Nginx下WebShell跨站的问题解决方法的相关文章

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

Laravel5中防止XSS跨站攻击的方法_php实例

本文实例讲述了Laravel5中防止XSS跨站攻击的方法.分享给大家供大家参考,具体如下: Laravel 5本身没有这个能力来防止xss跨站攻击了,但是这它可以使用Purifier 扩展包集成 HTMLPurifier 防止 XSS 跨站攻击. 1.安装 HTMLPurifier 是基于 PHP 编写的富文本 HTML 过滤器,通常我们可以使用它来防止 XSS 跨站攻击,更多关于 HTMLPurifier的详情请参考其官网:http://htmlpurifier.org/.Purifier 是

Laravel5中防止XSS跨站攻击的方法

本文实例讲述了Laravel5中防止XSS跨站攻击的方法.分享给大家供大家参考,具体如下: Laravel 5本身没有这个能力来防止xss跨站攻击了,但是这它可以使用Purifier 扩展包集成 HTMLPurifier 防止 XSS 跨站攻击. 1.安装 HTMLPurifier 是基于 PHP 编写的富文本 HTML 过滤器,通常我们可以使用它来防止 XSS 跨站攻击,更多关于 HTMLPurifier的详情请参考其官网:http://htmlpurifier.org/.Purifier 是

XHTML下JS浮动代码失效问题解决方法

XHTML下JS浮动代码失效问题解决方法 漂浮广告/对联代码 为什么在XHTML语言的网页中不能使用? 对联代码,查阅它在xhtml下的表达方式,结果很简单了.这是因为,按照标准来说,我们看到的窗体的滚动条不应该是 body 的,而是 HTML 的(也就是 document.documentElement 对象)所以,解决办法是:把html下不标准的代码"document.body.scrollTop"变换为"document.documentElement.scrollTo

ThinkPHP2.x防范XSS跨站攻击的方法_php实例

本文实例讲述了ThinkPHP2.x防范XSS跨站攻击的方法.分享给大家供大家参考.具体如下: 一直使用ThinkPHP2.x,通过乌云有向提交了ThinkPHP XSS攻击的bug,抽时间看了一下. 原理是通过URL传入script标签,ThinkPHP异常错误页面直接输出了script. 原理: http://ask.lenovo.com.cn/index.php?s=1%3Cbody+onload=alert(1)%3E 其中m的值是一个不存在的module,同时是一个完全的script,

基于jQuery IE6下PNG图片背景透明问题解决方法

基于jQuery IE6下PNG图片背景透明问题解决方法 IE6问题真的很多,其中有一个问题是PNG图片背景无法变成透明,取而代之的是一个色块,有时候我们想用png透明图片来做小图标,这个在IE6下就纠结了,下面我们用一个jquery插件来解决这个问题,希望能帮上大家. 首先下载SuperSleight for jQuery,再下载一张透明gif图片transparent.gif. 引用脚本: <script type="text/网页特效" src="/scripts

IE6下的PNG图片透明问题解决方法

ie6下的png图片透明问题解决方法 简单方法是有,用滤镜,但我在firefox下不能正常浏览,况且又耗资源,还不是web标准所提倡的,所以,弃之. filter:progid:dximagetransform.microsoft.alphaimageloader(src='images/1.png', sizingmethod='crop'); 这里是设置你所需要透明图片容器的名字,包括 a:hover (别写错了 :d) <script type="text/网页特效">

Nginx提示502 Bad Gateway错误问题解决方法小结

502 Bad Gateway错误问题解决方法 Nginx 502错误的原因比较多,是因为在代理模式下后端服务器出现问题引起的.这些错误一般都不是nginx本身的问题,一定要从后端找原因!但nginx把这些出错都揽在自己身上了,着实让nginx的推广者备受置疑,毕竟从字眼上理解,bad gateway?不就是bad nginx吗?让不了解的人看到,会直接把责任推在nginx身上,希望nginx下一个版本会把出错提示写稍微友好一些,至少不会是现在简单的一句 502 Bad Gateway,另外还不

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/ 按上面的这个例子修改,换成你自己的域名和目录,多个网站就按上