EMLOG6.0空标签爆出数据库信息解决方法

投稿作者:小傲世 围观人数:21 所属分类:网页制作

平时大家用EMLOG的时候后台发布文章或者用了某些插件或者迁移网站数据的时候,有可能会导致数据库里面存在这个标签,但是这个标签是没有指定任何文章的,这会导致什么问题呢?

例如我有一个《傲世》标签,这个标签是没有指定任何文章的,是一个空标签,具体如下图所示:

数据库空标签示例图

假设我是访客,我访问了这个标签链接 https://blog.aswlcm.cn/tag/傲世 前台EMLOG6.0就会直接爆出SQL语句执行错误,如下图所示:

emlog6.0查询空标签报错

报错过程:通过访问标签链接路由分配到tag_controller.php控制器,控制器中执行到函数getTagByName,然后函数getTagByName就会执行函数getIdFromName将这个标签内的所有文章ID返回出来,并且传递给函数getTagById,随后就进一步的将各个文章内容展示出来,问题就出在函数getTagById这一步,如果函数getIdFromName返回的是一个毛都没有的值,就会产生连锁反应,导致后面的函数无法进一步执行,SQL查询自然就会出问题,就直接报错了。

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

修复方法如下:

打开 网站根目录\include\model\tag_model.php 中大概53行函数getTagById改为如下:

    function getTagById($tagId) {
        $blogs = $this->getBlogIdsFromTagId($tagId);
        if($blogs===false)return false;
        $blogIdStr = implode('','', $blogs);
        return $blogIdStr;
    }
随后往下继续编辑,大概321行函数getBlogIdsFromTagId改为如下:
    /**
     * 从TagId获取到BlogId列表 (获取到一个Tag下所有的文章)
     * @param int $tagId 标签ID
     * @return array 文章ID列表
     */
    function getBlogIdsFromTagId($tagId) {
        $blogs = array();

        $sql = "select `gid` FROM `" . DB_PREFIX . "tag` WHERE `tid` = " . $tagId;
        $query = $this->db->query($sql);

        if ($this->db->num_rows($query) > 0) {
            $result = $this->db->fetch_array($query);
            if ( ! empty($result[''gid'']))
            {
                $blogs = explode('','', $result[''gid'']);
            }else{
              return false;
            }
        }

        return $blogs;
    }
实际上就是加上了个判断,如果数据库查询不到该标签,就返回布尔值:假,并且将这个假返回给函数getTagById,如果得到的值为假,则直接输出假,网站就会显示404错误,而不会直接爆出SQL语句了!

温馨提示:食用本章前可搜索本站更多关于EMLOG的文章,帮助您修复更多的EMLOG漏洞!

the end
免责声明:本文来自鸿哥资源网发布,但不代表本站的观点和立场。
已有次赞
我要评论 0条评论,0条回复
请先登录后再评论

登录您的账号