Overview
source:起点
sink:终点
Constructing a path query
针对C/C++, C#, Java, 和JavaScript的常用模板如下:
/**
* ...
* @kind path-problem
* ...
*/
import <language>
import DataFlow::PathGraph
...
from Configuration config, DataFlow::PathNode source, DataFlow::PathNode sink
where config.hasFlowPath(source, sink)
select sink.getNode(), source, sink, "<message>"
其中:
DataFlow::PathGraph表示需要引入的CodeQL path graph module的标准类库
source和sink表示path graph上的节点,DataFlow::PathNode是他们的类型。
Configuration是一个类,其中包括定义了data如何从source流向sink的predicates。
针对python需要使用一个不同的模板:
/**
* ...
* @kind path-problem
* ...
*/
import python
import semmle.python.security.Paths
...
from TaintedPathSource source, TaintedPathSink sink
where source.flowsTo(sink)
select sink.getNode(), source, sink, "<message>"
semmle.python.security.Paths
表示从CodeQL标准类库中引入的path graph模块。
source
和sink
是path graph上的节点, TaintedPathSource和TaintedPathSink分别表示他们的类型。
在python中不需要声明一个配置类。
References
https://help.semmle.com/QL/learn-ql/writing-queries/path-queries.html