You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否不指定表名及特定关键字查询MySQL users表?

日志过滤规则的绕过风险及应对

确实存在绕过你的过滤规则的可能

攻击者可以通过多种方式在不直接使用"users"表名及指定关键字的前提下查询users表数据,导致日志遗漏,常见方法包括:

  • 使用表的内部数字ID:
    MySQL允许通过表的内部标识符(table_id)代替表名。攻击者先通过查询获取users表的ID:

    SELECT table_id FROM information_schema.tables WHERE table_name = 'users';
    

    之后直接用ID查询:

    SELECT * FROM 1234; -- 1234为users表的table_id
    

    这条语句不含"users"及你指定的关键字,会被过滤规则遗漏。

  • 利用预定义视图:
    若攻击者提前创建了指向users表的视图:

    CREATE VIEW u AS SELECT * FROM users;
    

    后续仅需调用视图即可查询数据:

    SELECT * FROM u;
    

    该语句无"users"关键字,会被过滤掉。

  • 调用存储过程/函数:
    攻击者预先创建包含users表查询逻辑的存储过程:

    DELIMITER //
    CREATE PROCEDURE get_users()
    BEGIN
      SELECT * FROM users;
    END //
    DELIMITER ;
    

    调用时仅需执行:

    CALL get_users();
    

    调用语句不含目标表名及指定关键字,会被过滤遗漏。

应对建议

  1. 改用Google Cloud SQL原生审计日志:
    放弃基于general_log的字符串过滤,启用Cloud SQL的审计日志功能,它能精准记录所有对users表的访问操作,无论攻击者采用何种访问方式。

  2. 强化过滤规则:
    若必须使用general_log,需扩展匹配逻辑:

    • 监控所有查询information_schema.tables的操作,尤其是获取users表信息的请求
    • 匹配所有涉及表ID的查询语句
    • 监控视图、存储过程的创建及调用操作
  3. 限制localhost用户权限:
    缩小localhost用户的权限范围,禁止其创建视图、存储过程,或查询information_schema获取表结构信息,从根源降低攻击者的绕过能力。

内容的提问来源于stack exchange,提问作者jwtrees

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 23:52:33