local data flow, global data flow, taint tracking
data flow graph
数据流节点属于DataFlow:Node类以及它的子类,AST节点属于ASTNode类以及它的子类。
类
DataFlow::ValueNode
an expression, destructuring pattern, or declaration of a function, class, namespace, or enum.
匹配示例
DataFlow::PropRef 包括DataFlow::PropRead和DataFlow::PropWrite
DataFlow::PropRead类
A data flow node that reads to an object property.
匹配示例
DataFlow::PropWrite
A data flow node that writes to an object property.
匹配示例
DataFlow::ParameterNode
a function parameter.
匹配示例
x function f(x) {}; //x is a parameter of function f(x) {}
DataFlow::InvokeNode
a function invocation (with or without new).
匹配示例
Math.abs(x)new Array(16)
DataFlow::NewNode
a function invocation (with new).
new Array(16)
DataFlow::CallNode
a function invocation (without new).
匹配示例
Math.abs(x)
DataFlow::MethodCallNode
a method call, that is, a call of form x.m(…).
匹配示例
Math.abs(x)obj.foo()
DataFlow::GlobalVarRefNode
a direct reference to a global variable,相对于该类来说,更常用下面predicate
DataFlow::globalVarRef(name)
匹配示例
documentMathwindow.documentwindow.Mat
DataFlow::FunctionNode
a function definition
匹配示例
function greet() { // function declarationconsole.log("Hi");}var greet =function() { // function expressionconsole.log("Hi");};var greet2 =() => console.log("Hi") // arrow function expressionvar o = {m() { // function expression in a method definition in an object literalreturn 0;},get x() { // function expression in a getter method definition in an object literalreturn 1}};class C {m() { // function expression in a method definition in a classreturn 0;}}
DataFlow::ClassNode
a class definition or a function definition acting as a class.
匹配示例
class C {method()}function F() {}F.prototype.method = function() {}F.prototype = {method: function() {}}extend(F.prototype, {method: function() {}});
谓词
DataFlow::valueNode(x)
DataFlow::parameterNode(p)
DataFlow::thisNode(s)
DataFlow::globalVarRef(g)
查询示例
匹配所有引用全局变量document的节点
DataFlow::globalVarRef("document")
DataFlow::moduleMember(p, m)
查询示例
匹配所有调用fs模块readFile方法的节点
DataFlow::moduleMember("fs", "readFile")
getAPredecessor
getASuccessor
asExpr
可以将DataFlow::Node转为一个表达式
