3. 函数调用:审计调用和参数
在代码审计和安全分析中,精准地识别和审查函数调用及其参数是至关重要的。SyntaxFlow 提供了强大的功能,使得这一任务变得高效和简便。本教程将详细介绍如何利用 SyntaxFlow 来查找和审计函数调用及其参数。
函数调用审计简介
SyntaxFlow 的函数调用审计功能允许用户精确地查找特定函数的调用位置,并对其参数进行详细的审查。这对于识别潜在的安全风险,如不当的数据处理或可能的漏洞利用,具有重要意义。通过以下内容,您将学习如何在 SyntaxFlow 中高效地进行函数调用及其参数的审计。
语法定义
在 SyntaxFlow 中,函数调用及参数的审计基于以下语法规则:
filterItemFirst
: nameFilter # NamedFilter
| '.' lines? nameFilter # FieldCallFilter
;
filterItem
: filterItemFirst #First
| Question? '(' lines? actualParam? ')' # FunctionCallFilter
;
actualParam
: singleParam lines? # AllParam
| actualParamFilter+ singleParam? lines? # EveryParam
;
actualParamFilter: singleParam ',' | ',';
singleParam: ( '#>' | '#{' (recursiveConfig)? '}' )? (filterStatement | conditionExpression) ;
这些规则定义了如何匹配函数调用及其参数,使得用户能够灵活地编写查询以满足不同的审计需求。
提示
当括号前带 ?(例如 setFeature?(...))时,含义是“按参数条件过滤调用”,而不是普通的参数捕获。用法与注意事项详见 过滤器:?{...} 筛选审计结果。
具体案例解析
1. 搜索函数调用
要找到所有 .parse 方法的调用,可以使用以下 SyntaxFlow 查询:
.parse();
这条规则将匹配所有调用 .parse 方法的地方,不论其上下文或传递的参数。
2. 审计所有参数
如果您希望审计 .parse 方法调用时传递的所有参数,可以使用如下格式:
.parse(* as $source);
解释:
*表示匹配任何参数。as $source将匹配到的参数赋予变量名$source,方便后续分析。