Overview
source:起點(diǎn)
sink:終點(diǎn)
Constructing a path query
針對(duì)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的標(biāo)準(zhǔn)類庫(kù)
source和sink表示path graph上的節(jié)點(diǎn),DataFlow::PathNode是他們的類型。
Configuration是一個(gè)類,其中包括定義了data如何從source流向sink的predicates。
針對(duì)python需要使用一個(gè)不同的模板:
/**
* ...
* @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標(biāo)準(zhǔn)類庫(kù)中引入的path graph模塊。
source和sink是path graph上的節(jié)點(diǎn), TaintedPathSource和TaintedPathSink分別表示他們的類型。
在python中不需要聲明一個(gè)配置類。
References
https://help.semmle.com/QL/learn-ql/writing-queries/path-queries.html