首页 > 解决方案 > 我可以将字符串与 AST 的某个子树匹配吗?

问题描述

我正在尝试使用 antlr4(+python3) 来检测 sql 注入,并说现在我得到了后端 SQL 命令“SELECT * FROM AAA WHERE BBB = ''”,以及用户的输入“CCC”。

现在解析树看起来像这样:

在此处输入图像描述

我的问题是,我可以将“CCC”(用户输入)直接匹配到子树“谓词”(见上图),即在“谓词”处进入解析树吗?

我有几个想法:

  1. 重写语法文件
  2. 使用访问者并跳过肯定出现在“谓词”之前的节点

这些想法很复杂,那么我应该在现有文献中寻找什么?或者有什么其他建议?

标签: pythonpython-3.xsql-injectionantlr4abstract-syntax-tree

解决方案


  1. 使用访问者并跳过肯定出现在“谓词”之前的节点

当然可以:当遍历解析树并遇到用户输入时,只需“遍历”节点直到遇到您感兴趣的节点。遍历解析树时,ANTLR 会为您提供当前的解析上下文。这个上下文有一个parent上下文,你可以用它来“走”树。


推荐阅读