我可以将字符串与 AST 的某个子树匹配吗?

Posted

技术标签:

【中文标题】我可以将字符串与 AST 的某个子树匹配吗?【英文标题】:Can I match a string to a certain subtree of the AST? 【发布时间】:2021-02-25 07:05:59 【问题描述】:

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

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

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

我有几个想法:

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

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

【问题讨论】:

什么是“预测”?这是从哪里来的? "predict" 是笔误,我改成了"predicate",就是图中所示AST的一个节点。抱歉打错了。 【参考方案1】:
    使用访问者并跳过肯定出现在“谓词”之前的节点

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

【讨论】:

以上是关于我可以将字符串与 AST 的某个子树匹配吗?的主要内容,如果未能解决你的问题,请参考以下文章

Excel - 需要从数组中搜索列表单元格的子字符串,无法获得索引/匹配工作吗?

正则表达式

sql可以替换模糊匹配字符串吗

正则表达式怎么匹配前面紧跟某个字符串的字符

iptables 可以只允许对某个域名进行 DNS 查询吗?

正则表达式如何匹配空值?