首页 > 网站 > 建站经验 > 正文

方维购物分享漏洞bug“喜欢分享的会员还喜欢”

2024-04-25 20:44:22
字体:
来源:转载
供稿:网友

不知道是客户自身数据的问题还是方维程序的问题,今天有客户反映,在浏览别人的 个人中心->宝贝 这个页面时,点击右边分享的宝贝时,如果该宝贝是被喜欢的,就会出现数据库查询错误:

该访问链接是:

http://www.xxxxxxx.com/note.php?action=g&sid=12645&id=6757

错误信息:

  • [Type] dbquery_error
  • [1064] 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 ‘) LIMIT 0,20′ at line 1
  • [Query] SELECT share_id,uid,content,collect_count,comment_count,create_time,cache_data FROM share WHERE share_id IN (12654,12651,12649,12647,12644,12600,12599,12495,12493,12491,12489,12486,12485,12484,12481,12480,12478,12476,12475,) LIMIT 0,20

sql语句很明显的错误,是在in()括号中最后一个值后面多了一个“,”号,

这条查询语句的位置在:

core/service/share.service.php文件的 public function getCollectShareByShare($share_id,$num = 20)函数中,

注意下面红色字体

if(count($uids) > 0)
   {
    $share_ids = array();
    $res = FDB::query(‘SELECT GROUP_CONCAT(DISTINCT sgi.share_id
      ORDER BY sgi.share_id DESC SEPARATOR /’,/’) AS share_ids,sgi.uid
     FROM ‘.FDB::table(‘user_collect’).’ AS uc
     INNER JOIN ‘.FDB::table(‘share_goods_index’).’ AS sgi ON sgi.share_id = uc.share_id AND sgi.share_id <> ‘.$share_id.’
     WHERE uc.c_uid IN (‘.implode(‘,’,$uids).’) GROUP BY sgi.uid LIMIT 0,’.$num);
    while($data = FDB::fetch($res))
    {
     $share_ids = explode(‘,’,$data['share_ids']);
     $share_ids[] = (int)current($share_ids);

    }
    $share_ids = array_unique($share_ids); //源代码中,只是过滤掉了数组中的重复值
    $share_ids = array_filter($share_ids);  //这句代码是我后来添加的,过滤掉了数组中的空值,这样程序就可以正常执行了
    if(count($share_ids) > 0)
    {
     $list = FDB::fetchAll(‘SELECT share_id,uid,content,collect_count,comment_count,create_time,cache_data FROM ‘.FDB::table(‘share’).’ WHERE share_id IN (‘.implode(‘,’,$share_ids).’) LIMIT 0,’.$num);
     $list = ShareService::getShareDetailList($list);
    }

 不管这个问题是不是客户由于操作数据库失误导致的,我想都应该对查询得到的数据数组,进行空值过滤。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表