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是一个基于PHP+MySQL搭建,功能强大,高效的开源论坛系统。
MyBB v1.4.5 简体中文版 build090420 MyBB是一个性能出色的论坛软件,用过就知道。 为了让广大的国人能用上如此优秀的论坛软件,我发布此MyBB1.4.4简体中文版供大家使用。大家有什么意见 和对翻译上的建议和修正,...
MyBB 1.8.26 更新日志:2021-03-08更新图元文件;编写父列表后更新论坛缓存;合并来自Eldenroot/patch-28的拉取请求;显示蜘蛛设置(开/关);将标签“ mybb_1826”合并到功能中;修复投票表决计数SQL注入;再添加一个...
MyBB是一个性能出色的论坛软件,用过就知道。为了让广大的国人能用上如此优秀的论坛软件,我发布此MyBB1.4.4简体中文版供大家使用。大家有什么意见和对翻译上的建议和修正,欢迎提出。MyBB是一个基于PHP+MySQL搭建
本次更新修复了1.4.13以来发现的问题和不安全因素,这些bug的修复使MyBB变得更稳定。这将是MyBB1.4系列的最后一个维护更新。 2010.8.3 MyBB 1.4.14 简体中文版发布 - 维护更新 1.#180 - 对于PHP5.3/6.0的变化与...
MyBB免费论坛 v1.8.33.zip
MyBB_Theme_Mybb-Font-Awesome-5-light-dark-SCEditor- [对于1.8] MyBB 1.8.21的MyBB Font Awesome 5浅色或深色编辑器[SCEditor]作者:Vintagedaddyo 描述:(*来自我曾经分享的旧教程) 使用[SCEditor]的Font ...
发展持续请阅读博客公告。MyBB合并系统MyBB合并系统的存储库。社区在访问我们的社区以获取支持。执照MyBB合并系统是根据。
MyBB是一个基于PHP+MySQL搭建,功能强大,高效的开源论坛系统。 本次更新修复了1.4.11以来发现的问题和不安全因素,包括两个中等级别的安全问题和一个低级别安全问题。还有其它六十多个小问题。
MyBB 使用了标准的论坛结构和模式,所以您的用户可以在您的论坛获得良好的用户体验。用户可以通过用户控制面板来自定义他们访问论坛的方式或者自定义他们想看到的论坛的内容,他们还可以方便地发表和答复一个主题...
MyBB在设计时集成了很多经过深思熟虑的用户习惯,这让MyBB变得更加简单易用。MyBB使用了标准的论坛结构和模式,所以您的用户可在您的论坛获得良好的用户体验。用户可以通过用户控制面板改变他们自己的习惯,当然他们...
该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:Vue/JSP/React/HTML+JS+CSS/ASP 后台框架代码:java/c/c++/...
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 在设计时集成了很多经过深思熟虑的用户习惯,这让 MyBB 变得更加简单易用。 MyBB 使用了标准的论坛结构和模式,所以您的用户可在您的论坛获得良好的用户体验。用户可以通过用户控制面板改变他们自己的习惯,...
该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:Vue/JSP/React/HTML+JS+CSS/ASP 后台框架代码:java/c/c++/...
MyBB 巴西葡萄牙语翻译项目MyBB 的项目在这个 Git 中,我们将开发诸如将 MyBB 1.8.x 翻译成巴西葡萄牙语 MyBB 官方链接等项目官方社区讨论话题如何安装 额外的MyBB 合并项目 - MyBB 导入系统下载GitHub
MyBB 1.8.x的插件,用于将论坛组同步到TS3组。 需要在MyBB根文件夹中安装 ! 您只需要在“库”文件夹中找到“ TeamSpeak3”文件夹。 将其上传到MyBB根文件夹。 快速安装指南: TS3设置: 您需要创建一个...
MyBB的全称是mybboard,是一个基于PHP+MySQL搭建,功能强大,高效的开源论坛系统。
MyBB 使用了标准的论坛结构和模式,所以您的用户可以在您的论坛获得良好的用户体验。用户可以通过用户控制面板来自定义他们访问论坛的方式或者自定义他们想看到的论坛的内容,他们还可以方便地发表和答复一个主题...
MyBB 使用了标准的论坛结构和模式,所以您的用户可以在您的论坛获得良好的用户体验。用户可以通过用户控制面板来自定义他们访问论坛的方式或者自定义他们想看到的论坛的内容,他们还可以方便地发表和答复一个主题...