python - 我可以将字符串与 AST 的某个子树匹配吗?
问题描述
我正在尝试使用 antlr4(+python3) 来检测 sql 注入,并说现在我得到了后端 SQL 命令“SELECT * FROM AAA WHERE BBB = ''”,以及用户的输入“CCC”。
现在解析树看起来像这样:
我的问题是,我可以将“CCC”(用户输入)直接匹配到子树“谓词”(见上图),即在“谓词”处进入解析树吗?
我有几个想法:
- 重写语法文件
- 使用访问者并跳过肯定出现在“谓词”之前的节点
这些想法很复杂,那么我应该在现有文献中寻找什么?或者有什么其他建议?
解决方案
- 使用访问者并跳过肯定出现在“谓词”之前的节点
当然可以:当遍历解析树并遇到用户输入时,只需“遍历”节点直到遇到您感兴趣的节点。遍历解析树时,ANTLR 会为您提供当前的解析上下文。这个上下文有一个parent
上下文,你可以用它来“走”树。
推荐阅读
- jquery - jQuery on 单击元素内的所有内容
- r - 迭代导入excel文件并在R中按文件名平均匹配值
- javascript - preg_match 不工作的 php 和 java 脚本
- python - 从字符串列表中删除空格变化的 Python 最佳实践
- mysql - 在 phpMyAdmin 上保存数据库 - mySQL
- pandas - 在 read_csv 中使用 dtype 对象会引发 UnboundLocalError
- tensorflow - 记录消息分类/分组并为每个组查找人类可读的模式
- google-chrome - 如何使用 CLI 在 Chromebox 上禁用有问题的“Chrome 媒体路由器”(Chromecast) 扩展?
- google-sheets - 我无法正确使用 IMPORTXML
- ruby-on-rails - Rails 同时启动多个涉及循环的进程