在这里记录一些WallFilter拦截的规则

注释

注释存在的SQL是危险的,但是有些位置的注释常用,并不会造成危害。

  1. /* A */ SELECT /* B */ ... /* C */ ... FROM ... /* D */ WHERE /* E */

其中A是头部注释,B是第一个Token之后的注释。A和B不会产生SQL注入的。E是WHERE条件后的注释,最容易产生SQL注入。

  1. /* ... */ SELECT ID, NAME FROM T //允许
  2. SELECT /* ... */ ID, NAME FROM T //允许
  3. SELECT ID, /* ... */ NAME FROM T //拦截
  4. SELECT ID, NAME FROM T /* ... */ //拦截

变量

有一些全局变量会暴露数据库信息,但有一些全局变量不得不使用。在mysql中,目前全局变量使用白名单机制,在白名单内的全局变量才会被允许使用。而且全局变量只允许用在SELECT_LIST和SET中使用。

  1. SELECT @@SESSION.sql_mode //允许
  2. SELECT @@GLOBAL.sql_mode // 允许
  3. SELECT * FROM T WHERE @@SESSION.sql_mode = 'ANSI' //拦截
  4. SELECT * FROM T WHERE @@sql_mode = 'ANSI' // 拦截