测试环境FreeBSD7.4+php5.2.17+mysql5.1.56+nginx1.0.1(亲测可用)
apache因为有php_admin_value open_basedir 可以限制webshell跨目录,可是nginx目前没有这样的模块支持。
之前网上也有人通过每个站点使用单独的conf,使php-cgi开启不同的端口来区分开,达到防webshell跨目录的目的,但本人所用生产环境经测还是不行,所以就从修改php的源代码来着手
随即从网上找了下,确实有很多种修改源码的方法,但是经过测试都没有成功,无奈还得从源代码研究,经过多种测试最终解决了,编译php时修改代码(main/fopen_wrappers.c 的232-245行修改如下:)
- /* 修改代码 begin */
- char *env_document_root = sapi_getenv("DOCUMENT_ROOT", sizeof("DOCUMENT_ROOT")-1 TSRMLS_CC);
- char temp[500] = {'\0'};
- strcpy(temp, ptr);
- char *iPos = strrchr(temp, ':');
- if (iPos)
- {
- temp[strlen(temp) - strlen(iPos) + 1] = '\0';
- ptr = strcat(temp, env_document_root);
- }
- efree(env_document_root);
- while (ptr && *ptr) {
- end = strchr(ptr, DEFAULT_DIR_SEPARATOR);
- if (end != NULL) {
- *end = '\0';
- end++;
- }
- if (php_check_specific_open_basedir(ptr, path TSRMLS_CC) == 0) {
- efree(pathbuf);
- return 0;
- }
- ptr = end;
- }
- /* 修改代码 end */
并在php.ini中启用open_basedir如
- open_basedir=/tmp/:/usr/local/www/
如果不想修改的话,可以下载已经修改好的文件替换即可!
如非注明则为本站原创文章,欢迎转载。转载请注明转载自:moon's blog
博主的链接已加~!
😛 😛 😛
解压密码说多少啊
你试试www.92csz.com
open_basedir 会让访问量大的服务器压力剧增,开销太大,最终放弃
访问量大的服务器,都是单台单用了,还要open_basedir何用 🙁