应用异常监控
数据库异常监控 
在SQL注入的探测阶段,或者报错注入的攻击阶段,通常会在数据库产生大量的异常。因此,通过监控异常可以有效的发现的SQL注入攻击。目前我们所有支持的数据库均可以监控SQL异常,且异常代码可以在插件里配置。
插件里默认监控的SQL异常如下,具体请参考官方插件的 sql_exception 检测算法。
MySQL 
| 错误编号 | 
报警样例 | 
| 1060 | 
Duplicate column name '5.5.60-0ubuntu0.14.04.1' | 
| 1062 | 
Duplicate entry '::root@localhost::1' for key 'group_key' | 
| 1064 | 
You have an error in your SQL syntax; check the manual that corresponds  to your MySQL server version for the right syntax  to use near ') from mysql.user' at line 1 | 
| 1105 | 
XPATH syntax error: '~root@localhost~' | 
| 1367 | 
Illegal non geometric 'user()' value found during parsing | 
PostgreSQL 
| 错误编号 | 
报警样例 | 
| 42601 | 
normal syntax error | 
| 22P02 | 
ERROR:  invalid input syntax for type double precision: "DATABASE: test1" | 
SQLite 
| 错误编号 | 
报警样例 | 
| 1 | 
generic error, like syntax error、malformed MATCH expression: ["3.6.23.1] and other | 
Oracle 
| 错误编号 | 
报警样例 | 
| ORA-01740 | 
missing double quote in identifier | 
| ORA-01756 | 
quoted string not properly terminated | 
| ORA-00907 | 
missing right parenthesis | 
HSQL 
| 错误编号 | 
报警样例 | 
| -5583 | 
malformed quoted identifier | 
| -5590 | 
unexpected end of statement | 
SQLServer 
| 错误编号 | 
报警样例 | 
| 105 | 
Unclosed quotation mark after the character string '%.*ls'. | 
| 245 | 
Conversion failed when converting the %ls value '%.*ls' to data type %ls. | 
DB2 
| 错误编号 | 
报警样例 | 
| 42603 | 
The string constant beginning with "'xxx" does not have an ending string | 
FAQ 
1. Unable to derive error code from SQL exceptions 错误 
当MySQL服务器与JDBC驱动不兼容,我们将无法从异常消息里提取SQL错误代码,并打印这个错误。比如 JDBC 5.1.46 + MySQL 5.5 就会出现这个问题,可以考虑升级JDBC驱动到对应的版本来解决。
这个错误会让数据库异常监控失效。