[Bug]emlog6查询不存在的标签爆出数据库信息

平时可能会有删标签的习惯,有网站收录了删掉的标签,访客访问这个链接EMLOG6就会报SQL语句执行错误。

例如标签“测试”不存在,访问这个标签链接http://www.myxzy.com/tag/测试 就会报SQL语句执行错误,会出现以下提示:

SQL语句执行错误: SELECT `gid` FROM `emlog_tag` WHERE `tid` =

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

346-1.png


报错过程:通过访问标签链接路由分配到tag_controller.php控制器,控制器中执行到函数getTagByName,直接tag_model.php中大概47行函数

getTagByName中有2个函数getIdFromName和getTagById,getIdFromName会出现false的情况,getTagById没考虑到这种情况导致的。然后根据tag_controller.php之后的情况,修改函数getTagByName最为合适。

建议修复,因为SQL报错会被一些安全网站或者搜索引擎识别为安全漏洞,减低权限。


修复方法:

tag_model.php中大概47行函数改为如下

    function getTagByName($tagName) {
        $tagId = $this->getIdFromName($tagName);
	return $this->getTagById($tagId); 
    }
修改为    
    function getTagByName($tagName) {
        $tagId = $this->getIdFromName($tagName);
		if ($tagId) {
			return $this->getTagById($tagId); 
		}else{
			return false;
		}	
    }



目前有 2 条评论

avatar

C  2018-12-08 01:51 2楼

感谢,确实是个挺严重的问题,如果注入js代码会造成XSS 回复
avatar

windtree  2018-11-27 14:09 1楼

再次感谢,的确会被一些安全网站检查标识为:SQL注入漏洞。 回复
昵称
邮箱
主页
提交
订阅