搜索定位:搜索符号或方法名
在进行代码审计或安全分析时,快速准确地定位感兴趣的代码片段至关重要。本文将介绍如何利用 SyntaxFlow 的词法与符号搜索功能,从变量名和方法名入手,实现高效的代码审计。
词法与符号搜索简介
SyntaxFlow 提供强大的词法与符号搜索功能,允许用户直接定位特定的变量名、方法名或函数名。这在代码审计和安全分析中尤为重要,因为它能帮助开发者迅速找到感兴趣的代码片段。
语法规则
filterItemFirst
: nameFilter # NamedFilter
| '.' lines? nameFilter # FieldCallFilter
;
nameFilter: '*' | identifier | regexpLiteral;
具体案例解析
1. 搜索特定的变量名
如果需要查找代码中所有使用 documentBuilder
变量的地方,可以使用以下 SyntaxFlow 查询:
documentBuilder;
这条规则将匹配代码中所有 documentBuilder
变量的实例。
2. 搜索方法调用
要找到所有调用 parse
方法的位置,可以使用以下查询:
.parse;
通过 .
前缀,指定搜索的是方法或属性名,而非变量名。
3. 结合变量名和方法调用
若需精确定 位 documentBuilder.parse(...)
的调用位置,可以结合变量和方法名进行搜索:
documentBuilder.parse;
此查询将定位所有在 documentBuilder
对象上调用 parse
方法的代码位置。
4. 使用正则表达式进行模糊搜索
如果不确定具体的方法名,或者希望查找符合特定模式的所有方法,可以使用正则表达式。例如,查找所有以 get
开头的方法调用:
.get*;
或者使用更精确的正则表达式:
/(get[A-Z].*)/;
这将匹配所有以 get
开头,且后跟大写字母的方法,如 getName
、getInfo
等。
5. 使用 Glob 格式
对于更模糊的搜索,例如查找所有包含 config
字眼的变量或方法,可以使用 Glob 格式:
*config*;
此规则将匹配所有包含 config
的标识符,无论其前后如何。
6. 搜索常量
对于硬编码的常量、敏感信息或配置信息,可以进行精准或模糊匹配。常量搜索支持三种格式:regexp
、glob
、exact
。使用前缀 r
、g
、e
来指定格式,并支持 heredoc 和 QuotedString。例如:
g"a*"
e<<<CODE
password
CODE