Class SqlInjectionChecker

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

public class SqlInjectionChecker extends Object
SQL注入检查器

检查字符串是否包含SQL注入特征

定位声明:本检查器是 WAF 缓解层,基于黑名单启发式, 不能替代参数化查询 / ORM / 预编译语句——SQL 注入的根治方案是参数化查询, 黑名单永远存在绕过可能,请务必将参数化查询作为唯一防线,本功能仅作为纵深防御的补充。

防护策略(双通道检测):

  1. 解码通道:对 URL 解码后的原始文本执行带词边界(\b)/空白语义的 关键字与特征匹配——覆盖标准注入形态(INSERT INTO、1 OR 1=1、SLEEP( 等)
  2. 规范通道:对去除块注释与全部空白后的粘连文本执行无边界特征匹配—— 对抗拆词/空白变形(SEL/**\/ECT、SEL\nECT、' O R 1 = 1 ' 等)

已知代价:含独立 SQL 关键字词(如 "create"、"update")的正常业务文本可能被误判为注入, 这是黑名单方案的固有取舍,请通过配置校验开关或参数化查询规避。

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

    • SqlInjectionChecker

      public SqlInjectionChecker()
  • Method Details

    • containsSqlInjection

      public boolean containsSqlInjection(String value)
      检查是否包含SQL注入特征

      双通道检测: 1. 解码通道:注释符 + 关键字 + 特征在 URL 解码后的原文上匹配(词边界/空白语义有效) 2. 规范通道:粘连特征在去注释、去空白后的文本上匹配(对抗拆词/空白变形)

      Parameters:
      value - 待检查的字符串
      Returns:
      是否包含SQL注入特征