当前位置: 首页 > news >正文

mysql group_concat 与 union 联合查询漏洞,数据列最大长度为341

一、问题发现

最近 项目反馈有个问题,数据明明存在,但是到界面显示就少了一部分。
界面框框数据本应该勾选的,但是就是不勾选!
在这里插入图片描述

二、问题分析

经系列排查,发现问题所在 mysql group_concat 与 union 联合查询漏洞;

select * from (
select GROUP_CONCAT(subsystem_code) subsystem_code from code_temp where id <41
union  all 
select code as subsystem_code from code_temp2
) temp;

select GROUP_CONCAT(subsystem_code) subsystem_code from code_temp;

单个 GROUP_CONCAT 无论多个 subsystem_code都不存在任何问题,但是当 套上 union 之后,id 扩大到41时,GROUP_CONCAT(subsystem_code) 数据就被截取了,且字符串最大长度为 341.

mysql 官方说明:
The result is truncated to the maximum length that is given by the group_concat_max_len system variable, which has a default value of 1024. The value can be set higher, although the effective maximum length of the return value is constrained by the value of max_allowed_packet.
即 mysql group_concat_max_len所指定的,默认是1024,单位是byte,划算成字符要打折扣 341=1024/3;

show variables like 'group_concat_max_len';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| group_concat_max_len | 1024  |
+----------------------+-------+
1 row in set (0.00 sec)

三、问题解决

可以修改,修改办法如下:

方法一:修改MySQL配置文件my.cnf,在[mysqld]节点中添加

group_concat_max_len = 18446744073709551615

方法二:直接控制台上设置立即生效

-- 【必须操作】更改全局配置----
SET GLOBAL group_concat_max_len=18446744073709551615;
-- 【可选操作】使配置在当前会话中也立即生效,其它已经登录的会话终端需要重启生效----
SET SESSION group_concat_max_len=18446744073709551615;

方法三:业务层修正 (推荐)

通常的办法其实是让数据库返回一个列表,在应用服务层,进行join

相关文章:

  • ISO27001认证需要准备什么资料?
  • 腾讯研究成果登 Nature 子刊:scBERT 攻克单细胞测序数据分析痛点
  • Vue2和Vue3的区别——实例创建、响应式数据代理、v-for和v-if优先级、生命周期
  • 跑步装备推荐:2022年跑步装备选购清单
  • 【云原生之Docker实战】使用Docker部署Pichome个人相册系统
  • Docker部署go项目
  • 软件测试秋招技术面试(面经)
  • CSS进阶篇——伪类 (pseudo classes)
  • 【面试题】面试官: Vue如何实现权限管理?
  • Linux常用操作汇总:内容有点杂,但很实用
  • 机器学习基础:统计量与抽样分布
  • 如何学习HTML5 需要掌握哪些技能
  • pytorch深度学习训练模板(分类、回归)
  • 希尔伯特变换分析及应用
  • Redis安装,性能优化
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • docker容器内的网络抓包
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • JSDuck 与 AngularJS 融合技巧
  • js中的正则表达式入门
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • Otto开发初探——微服务依赖管理新利器
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • Service Worker
  • tab.js分享及浏览器兼容性问题汇总
  • 计算机在识别图像时“看到”了什么?
  • 解决iview多表头动态更改列元素发生的错误
  • 蓝海存储开关机注意事项总结
  • 聊聊directory traversal attack
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 前端路由实现-history
  • 数据结构java版之冒泡排序及优化
  • 一个SAP顾问在美国的这些年
  • 硬币翻转问题,区间操作
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • # Java NIO(一)FileChannel
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • (2.2w字)前端单元测试之Jest详解篇
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (6)设计一个TimeMap
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (C#)一个最简单的链表类
  • (Note)C++中的继承方式
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (区间dp) (经典例题) 石子合并
  • (三)elasticsearch 源码之启动流程分析
  • (生成器)yield与(迭代器)generator
  • (四)Linux Shell编程——输入输出重定向
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • .java 9 找不到符号_java找不到符号
  • .L0CK3D来袭:如何保护您的数据免受致命攻击