php-5.2和php5.3 版本之下修改php源码的方式防止跨站

php-5.2和php5.3 版本之下修改php源码的方式防止跨站。修改文件:

以php-5.2.17版本为例,位置:main/fopen_wrappers.c


PHPAPI int php_check_open_basedir(const char *path TSRMLS_DC)
{
	return php_check_open_basedir_ex(path, 1 TSRMLS_CC);
}

/* {{{ 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.jincon.com */
	  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 = '\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 permission to open it */
		return -1;
	}

	/* Nothing to check... */
	return 0;
}
/* }}} */


最后修改php.ini中的open_basedir改为:open_basedir = “/var/tmp/:/tmp/”

关键词: 防止跨站 , 修改php源码

上一篇: 书读百遍其义自现之利用usort对二维数组指定键值排序
下一篇: linux系统下python版查杀php webshell后门工具

目前还没有人评论,您发表点看法?
发表评论

评论内容 (必填):