完美解決
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_b
asedir
*/
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 = '\0';
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 permi
ssion to open it */
return -1;
}
/* Nothing to check... */
return 0;
}
需要添加的內容用紅色表示出來了,然後重新編譯安裝php即可。使用PHPspy2008測試,無法浏覽其他目錄。