最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Nginx下WebShell跨站的问题解决方法
时间:2011-03-28 编辑:简简单单 来源:一聚教程网
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跨站点目录访问问题
-
下一个: fckeditor配置与增加中字体方法
相关文章
- nginx安装到指定目录的教程 12-07
- Nginx配置如何区分PC或手机访问不同域名 10-31
- 全面解析Nginx到底能做什么 10-29
- Nginx的安装和多域名配置的实现方法 09-29
- nginx location 配置 正则表达式实例详解 07-11
- nginx配置多个站点共用80端口的解决方法 06-11