当前位置:首页 > 叨叨念念 > Emlog isLogCanComment函数小BUG

Emlog isLogCanComment函数小BUG

叨叨念念 / 星之宇 / 2021-7-12 8:00 / 浏览:3250 / 评论:0

Bug描述

今天论坛有人说评论有BUG,我看了一下,无意中注意到isLogCanComment函数。

	function isLogCanComment($blogId) {
		if (Option::get('iscomment') == 'n') {
			return false;
		}
		$query = $this->db->query("SELECT allow_remark FROM ".DB_PREFIX."blog WHERE gid=$blogId");
		$show_remark = $this->db->fetch_array($query);
		if ($show_remark['allow_remark'] == 'n' || $show_remark === false) {
			return false;
		}else {
			return true;
		}
	}

以上是isLogCanComment函数的代码,数据库(连接方式使用mysqli)查询$show_remark的值应该是空值NULL,所以不能用===false。

注意:数据库连接方式使用mysqli就会出现这个问题

影响就是POST伪造gid,可以把评论发布到不存在或者未审核未发布的文章下,影响应该不大。


by 2021-12-31

影响版本emlog所有版本(包含emlog pro 1.1.1)


解决方法1

修改emlog目录下include\model\comment_model.php的isLogCanComment函数的代码(只修复发布到不存在的文章下)

		if ($show_remark['allow_remark'] == 'n' || $show_remark === false) {
改成
		if ($show_remark['allow_remark'] == 'n' || $show_remark == false) {
或者
		if ($show_remark['allow_remark'] == 'n' || $show_remark === NULL) {


解决方法2

修改emlog目录下include\model\comment_model.php的isLogCanComment函数的代码为如下代码(完美修复)

function isLogCanComment($blogId) {
    if (Option::get('iscomment') == 'n') {
        return false;
    }
    $query = $this->db->query("SELECT gid FROM ".DB_PREFIX."blog WHERE allow_remark='y' AND hide='n' AND gid=$blogId");
    $show_remark = $this->db->fetch_array($query);
    return empty($show_remark) ? false : true;
}

目前有 0 条评论

    • 昵称
    • 邮箱
    • 网址