一聚教程网:一个值得你收藏的教程网站

热门教程

Nginx防跨目录与跨站配置方法

时间:2022-06-30 18:58:53 编辑:袖梨 来源:一聚教程网

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=111com.net]

 代码如下 复制代码

open_basedir=/home/wwwroot/111com.net/:/tmp/
[PATH=/home/wwwroot/111com.net]
open_basedir=/home/wwwroot/111com.net/:/tmp/

修改好了。

最后重启下php-fpm:sudo /etc/init.d/php-fpm restart

OK,。这样设置后。就能增强系统的安全性,PHP目前,折腾也只能在他所在的目录下设置啦

如果你不是php5.3.3以上版本我们就只能如下操作了

1、解压php源代码不细说了。

2、执行编译./configure -- (自带参数)

3、修改源代码。此文件位于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;

  /*添加开始,  add by http://www.111com.net */
  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;
   }
  } 
  // 添加的内容结束

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

然后执行

 代码如下 复制代码

make ZEND_EXTRA_LIBS='-liconv' make install
cp php.ini-dist /usr/local/php/etc/php.ini最后修改php.ini中的open_basedir改为:open_basedir =

"/var/tmp/:/tmp/"

热门栏目