`
cai21cn
  • 浏览: 76679 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Mybb1.8数据库核心操作update_query存在低级bug致数据丢失

    博客分类:
  • PHP
php 
阅读更多
Mybb1.6升级到1.8升级的过程中,遇到问题无数,近日发现了一个Mybb1.8数据库核心操作update_query的代码中存在严重bug,导致数据存入时漏掉前面的零,折腾数小时,发现错不在俺,而在mybb的升级代码。

数据表:test
字段
ID  int(10) AUTO_INCREMENT
name varchar(60) not null
category varchar(5)

在此表中category来表示分类,分类釆用常见的代码表示,共五位数字,前二位0l一99表示大类,后三位表示小类。在更新语句中通过Ajax提文更新,在台后语句中通过update_query更新数据。程序在1·6时工作正常,在开级1·8时更新混乱,检查下来发现category字段前面的“0”丢失。通过变化各种手段均不能解决问题。最后把Mybb的数据操作核心文件翻出来,对比其1.6版本发现代码存在低级bug,导致错误发生。

下面是1.8版数据更新过程
	function update_query($table, $array, $where="", $limit="", $no_quote=false)
	{
		global $mybb;

		if(!is_array($array))
		{
			return false;
		}

		$comma = "";
		$query = "";
		$quote = "'";

		if($no_quote == true)
		{
			$quote = "";
		}

		foreach($array as $field => $value)
		{
			if(isset($mybb->binary_fields[$table][$field]) && $mybb->binary_fields[$table][$field])
			{
				if($value[0] != 'X') // Not escaped?
				{
					$value = $this->escape_binary($value);
				}
				
				$query .= $comma."`".$field."`={$value}";
			}
			else
			{
				if(is_numeric($value))
				{
					$query .= $comma."`".$field."`={$value}";
				}
				else
				{
					$query .= $comma."`".$field."`={$quote}{$value}{$quote}";
				}
			}
			$comma = ', ';
		}

		if(!empty($where))
		{
			$query .= " WHERE $where";
		}

		if(!empty($limit))
		{
			$query .= " LIMIT $limit";
		}

		return $this->write_query("
			UPDATE {$this->table_prefix}$table
			SET $query
		");
	}



而1.6版本是这样的
function update_query($table, $array, $where="", $limit="", $no_quote=false)
	{
		if(!is_array($array))
		{
			return false;
		}
		
		$comma = "";
		$query = "";
		$quote = "'";
		
		if($no_quote == true)
		{
			$quote = "";
		}
		
		foreach($array as $field => $value)
		{
			$query .= $comma."`".$field."`={$quote}{$value}{$quote}";
			$comma = ', ';
		}
		
		if(!empty($where))
		{
			$query .= " WHERE $where";
		}
		
		if(!empty($limit))
		{
			$query .= " LIMIT $limit";
		}

		return $this->write_query("
			UPDATE {$this->table_prefix}$table
			SET $query
		");
	}


发生错误的是这样几句

	if(is_numeric($value))
				{
					$query .= $comma."`".$field."`={$value}";
				}
				else
				{
					$query .= $comma."`".$field."`={$quote}{$value}{$quote}";
				}



传过来category的值可能是01002或08003,只要is_numeric($value)为真就是数字类型?!这是什么逻辑。其时mysql能自动处理识别字符型和数字型的差别,升级的1.8版把简单的事情复杂化,错误的逻辑导致bug发生,导致传过来的由数字组成的字符串存入数据库时前面的0丢失。如果前面不为0,就不会出错,这样导致数据一片混乱。

一直以来很欣赏Mybb简洁的代码和漂亮的系统架构,2M代码包括图片CSS等竟然能完成如此多的功能,给予用户良好的扩展能力。没想到翻出这样一个bug,见笑了。1.6至1.8改动很大,发布过于仓促。总体说来,Mybb不失一个漂亮简洁的php论坛。
分享到:
评论

相关推荐

    mybb.zip_delphi mysql_mybb_mybb_com

    MyBB是一个广受欢迎的开源论坛系统,其设计目标是提供一个功能丰富且高效的操作平台,让用户可以轻松构建自己的在线社区。这个"mybb.zip_delphi mysql_mybb_mybb_com"文件包显然与MyBB论坛软件的开发和配置有关,...

    MyBB_CH.zip_mybb__php mysql 论坛

    MyBB v1.4.5 简体中文版 build090420 MyBB是一个性能出色的论坛软件,用过就知道。 为了让广大的国人能用上如此优秀的论坛软件,我发布此MyBB1.4.4简体中文版供大家使用。大家有什么意见 和对翻译上的建议和修正,...

    MyBB 1.8.26

    MyBB 1.8.26 更新日志:2021-03-08更新图元文件;编写父列表后更新论坛缓存;合并来自Eldenroot/patch-28的拉取请求;显示蜘蛛设置(开/关);将标签“ mybb_1826”合并到功能中;修复投票表决计数SQL注入;再添加一个...

    merge-system:MyBB合并系统可轻松将现有论坛(无论是MyBB还是其他论坛软件)合并到MyBB 1.8.x论坛中

    MyBB合并系统是一款专为论坛管理者设计的工具,旨在帮助用户轻松地将现有的论坛平台,无论是基于MyBB还是其他论坛软件,整合到MyBB 1.8.x版本的论坛环境中。这一系统的出现解决了多论坛并存时数据统一、用户体验一致...

    MyBB免费论坛 v1.8.33.zip

    v1.8.33是MyBB的一个稳定版本,提供了丰富的功能和改进,适用于个人、社区以及企业建立在线讨论平台。这个压缩包包含了运行和管理MyBB论坛所需的基本文件。 "说明.htm"通常是一个包含安装指南、使用提示或常见问题...

    MyBB_CH.zip_mybb

    MyBB是一个性能出色的论坛软件,用过就知道。为了让广大的国人能用上如此优秀的论坛软件,我发布此MyBB1.4.4简体中文版供大家使用。大家有什么意见和对翻译上的建议和修正,欢迎提出。MyBB是一个基于PHP+MySQL搭建

    MyBB_CH.zip_4 3 2 1

    本次更新修复了1.4.13以来发现的问题和不安全因素,这些bug的修复使MyBB变得更稳定。这将是MyBB1.4系列的最后一个维护更新。 2010.8.3 MyBB 1.4.14 简体中文版发布 - 维护更新 1.#180 - 对于PHP5.3/6.0的变化与...

    MyBB_Theme_Mybb-Font-Awesome-5-light-dark-SCEditor-:深色或浅色MyBB编辑器,使用[SCEditor]的Font Awesome 5图标

    MyBB_Theme_Mybb-Font-Awesome-5-light-dark-SCEditor- [对于1.8] MyBB 1.8.21的MyBB Font Awesome 5浅​​色或深色编辑器[SCEditor]作者:Vintagedaddyo 描述:(*来自我曾经分享的旧教程) 使用[SCEditor]的Font ...

    MyBB_CH.rar_PHP 论坛_论坛

    MyBB是一个基于PHP+MySQL搭建,功能强大,高效的开源论坛系统。 本次更新修复了1.4.11以来发现的问题和不安全因素,包括两个中等级别的安全问题和一个低级别安全问题。还有其它六十多个小问题。

    mybb.zip_js44556、cOm_php系统_pudn全称

    "Upload"文件夹通常是MyBB安装过程中需要用到的核心文件。这里包含了一系列PHP脚本和静态资源,如CSS样式表、JavaScript文件以及图像等,这些文件构成了MyBB论坛的前端和后端界面。用户在准备部署MyBB时,会将这个...

    MyBB免费论坛 v1.8.21

    MyBB 1.8.21 版本注重安全,修复了前一版本可能存在的安全漏洞,确保论坛数据的安全。同时,它提供了备份和恢复功能,以防数据丢失。 4. **升级与维护** 发布的mybb_v1.8.21压缩包包含了最新版本的MyBB,通常会...

    linux下的mybb论坛

    6. **备份与维护**:定期备份数据库和文件,以防数据丢失。同时,关注MyBB的官方更新,及时进行安全修复和功能升级。 7. **优化与扩展**:根据需要调整服务器配置,如PHP配置、缓存机制等,以提升性能。安装必要的...

    MyBB 国外最好的免费论坛 v1.8.21 英文版.zip

    MyBB在设计时集成了很多经过深思熟虑的用户习惯,这让MyBB变得更加简单易用。MyBB使用了标准的论坛结构和模式,所以您的用户可在您的论坛获得良好的用户体验。用户可以通过用户控制面板改变他们自己的习惯,当然他们...

    MyBB中文论坛 v0.1019

    10. **备份与恢复**:为了防止数据丢失,用户需要定期备份论坛数据库和文件,压缩包中的文档可能也会提及如何进行备份和在必要时恢复论坛状态。 11. **技术支持与社区**:MyBB有一个活跃的开发者社区,用户可以在...

    [论坛社区]MyBB 1.4.4 繁体中文版 Bulid 081221_mybb1404_1221.rar

    该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:Vue/JSP/React/HTML+JS+CSS/ASP 后台框架代码:java/c/c++/...

    MyBB v1.6.2 简体中文版

    MyBB论坛系统的核心特性包括: 1. **模块化设计**:MyBB采用模块化架构,允许用户根据需求添加或移除功能模块,如积分系统、主题分类等,增强了系统的灵活性和可扩展性。 2. **主题和模板系统**:MyBB提供丰富的...

    MyBB PR2 繁体中文版

    在下载"MyBB PR2 繁体中文版"后,用户需要按照官方提供的安装指南进行操作,这通常包括上传文件到服务器、配置数据库连接、运行安装脚本等步骤。安装完成后,可以通过后台管理系统进行进一步的设置和调整,例如添加...

    Mybb-XSS_SQL_RCE-POC:Mybb将CVE-2021-27890和CVE-2021-27889关联到RCE POC

    Mybb-XSS_SQL_RCE-POC Mybb将CVE-2021-27890和CVE-2021-27889关联到RCE POC 使用前: 这里有两个文件:1.js和Attack_listen.py 您应该修改这两个文件: 1.js: 修改mybb论坛网址和攻击网址: var bashurl = '...

    MyBB开源php论坛系统v1.8.21

    MyBB 在设计时集成了很多经过深思熟虑的用户习惯,这让 MyBB 变得更加简单易用。 MyBB 使用了标准的论坛结构和模式,所以您的用户可在您的论坛获得良好的用户体验。用户可以通过用户控制面板改变他们自己的习惯,...

Global site tag (gtag.js) - Google Analytics