Class SqlInjectionUtils

java.lang.Object
tech.riemann.nif.web.sql.SqlInjectionUtils

public class SqlInjectionUtils extends Object
SQL注入防护工具类

提供SQL注入检查和防护的静态方法

定位声明(M16):本工具为简化启发式——仅作基础字符检查与 LIKE 通配符转义, 不能替代参数化查询 / ORM / 预编译语句。SQL 注入的根治方案是参数化查询, 生产级 WAF 检测请使用 SqlInjectionChecker(双通道:解码+规范,18 条特征),本工具与其规则不一致。

主要功能: 1. 检查字符串是否安全(简化启发式) 2. 转义 LIKE 通配符(仅限 LIKE 场景) 3. 清理SQL危险字符

Author:
Kerbores(kerbores@riemann.tech)
  • Constructor Details

    • SqlInjectionUtils

      public SqlInjectionUtils()
  • Method Details

    • isSafe

      public static boolean isSafe(String value)
      检查字符串是否安全(简化启发式)

      检查常见的SQL注入特征

      M16-低级: 本方法为简化启发式,仅覆盖注释符/分号/OR-AND 特征, 与生产级 WAF 检查器 SqlInjectionChecker(双通道:解码+规范,18 条特征)规则不一致—— 高危接口请使用 SqlInjectionChecker 或参数化查询

      Parameters:
      value - 待检查的字符串
      Returns:
      是否安全
    • escape

      public static String escape(String value)
      转义 SQL 特殊字符——仅用于 LIKE 模式中的通配符转义

      M16: 本方法转义的是 %/_(LIKE 通配符)与 '/\(MySQL 方言转义), 不能替代参数化查询 / 预编译语句——SQL 注入的根治方案是参数化, 黑名单与转义永远存在绕过可能(如 OR 1=1 无法靠字符转义防御)。

      使用场景:构建 LIKE 查询时对用户输入做通配符转义(配合 ESCAPE 或 MySQL 反斜杠语义), 如 LIKE '%' || escape(key) || '%'

      Parameters:
      value - 原始字符串
      Returns:
      转义后的字符串
    • clean

      public static String clean(String value)
      清理SQL危险字符

      移除SQL注入相关的危险字符(注释符、分号等) 注意:不会移除 # 号(常用于正常场景如 hashtag、颜色值) 也不会移除 OR/AND 单词(避免误伤正常文本)

      M16: 清理式操作会静默删除数据,仅建议用于非关键展示场景;防注入仍以参数化为准

      Parameters:
      value - 原始字符串
      Returns:
      清理后的字符串