检测的代码
// first step, check whiteList boolean mulltiTenant = config.getTenantTablePattern() != null && config.getTenantTablePattern().length() > 0; if (!mulltiTenant) { WallCheckResult checkResult = checkWhiteAndBlackList(sql); if (checkResult != null) { checkResult.setSql(sql); return checkResult; } }
----------省略代码--------------------
WallVisitor visitor = createWallVisitor(); visitor.setSqlEndOfComment(endOfComment);
if (statementList.size() > 0) {
boolean lastIsHint = false;
for (int i=0; i<statementList.size(); i++) {
SQLStatement stmt = statementList.get(i);
if ((i == 0 || lastIsHint) && stmt instanceof MySqlHintStatement) {
lastIsHint = true;
continue;
}
try {
stmt.accept(visitor);
} catch (ParserException e) {
violations.add(new SyntaxErrorViolation(e, sql));
}
}
}
------------------省略代码----------------------- 下面的代码会将执行的sql加入到一个白名单缓存中,加入到sql在第二次处理时不会再经过WallVisitor的处理,缓存进去的sql也不是经过WallVisitor处理后的sql,所以在配置了最大查询条数(selectLimit)时,就不生效了
WallSqlStat sqlStat = null; if (violations.size() > 0) { violationCount.incrementAndGet();
if ((!updateCheckHandlerEnable) && sql.length() < MAX_SQL_LENGTH) {
sqlStat = addBlackSql(sql, tableStat, context.getFunctionStats(), violations, syntaxError);
}
} else {
if ((!updateCheckHandlerEnable) && sql.length() < MAX_SQL_LENGTH) {
sqlStat = addWhiteSql(sql, tableStat, context.getFunctionStats(), syntaxError);
}
}
原提问者GitHub用户vinartis
WallProvider 和 WallVisitor 是阿里云开源的 SQL 解析和语法分析工具,用于检测和防范 SQL 注入攻击。LRUCache 是一种缓存机制,用于提高数据访问的速度和效率。WhiteList 是 LRUCache 中的一种机制,用于存储可以直接访问的数据,以避免每次访问时都进行解析和处理。
根据您的描述,您的问题是关于 WallProvider 和 WallVisitor 在 LRUCache WhiteList 中的问题。具体来说,问题是在 WallVisitor 处理 SQL 语句之后,WallProvider 会被加入到 LRUCache 的 WhiteList 中。
这种行为是 WallFilter 的正常工作方式。在处理 SQL 语句时,WallVisitor 检测和解析 SQL 语句,然后生成相应的 AST(抽象语法树)。AST 会被传递给 WallProvider 进行进一步的分析和处理。在处理完成后,WallProvider 会被加入到 LRUCache 的 WhiteList 中,以避免重复的解析和处理。
问题已修复,请用新版本
https://github.com/alibaba/druid/releases/tag/1.2.5
原回答者GitHub用户wenshao
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。