如何解决如何在codeql for javascript中吸引变量的传递使用
这是一个例子:
var express = require('express');
var http = require('http');
var app = express();
var bodyParser = require('body-parser');
app.use(bodyParser.json({ type: 'application/json',limit: '50mb'}));
app.use(bodyParser.urlencoded({limit: '50mb',extended: true,parameterLimit:50000}));
var server = http.createServer(app);
我想提取从 require('express')
到 app.use
的路径,我该如何设计 codeql 查询,DataFlow::Node.getASuccessor()
函数似乎无法从 {{1} 检索数据流}} 到 express()
,以及之后 app
的用法。
这是我的尝试,我只得到了 app
的路径。
app
结果如下:
import javascript
predicate isImportAssign(DataFlow::Node n,DataFlow::ModuleImportNode m){
exists(Variable a| a.getADefinition().getSource() = m.asExpr() and n.asExpr() = a.getADefinition().getTarget())
}
predicate isTarget(DataFlow::ModuleImportNode a,DataFlow::Node b){
(b.(DataFlow::PropRef).getBase() = a.getASuccessor*()
or
b = a.getASuccessor*())
and
a != b
}
predicate isAssignedByCall(DataFlow::Node m,DataFlow::Node n){
exists(Assignment a | a.getLhs() = n.asExpr() and a.getRhs() = m.getEnclosingExpr().getParentExpr())
or
exists(DeclStmt v | v.getAChild().getChild(0).(Expr) = n.asExpr() and v.getAChild().getChild(1).(Expr) = m.getEnclosingExpr().getParentExpr())
}
predicate hasDataFlow(DataFlow::Node source,DataFlow::Node sink){
exists(TaintTracking::Configuration cfg | cfg.hasFlow(DataFlow::valueNode(source.getEnclosingExpr().getParentExpr()),sink))
}
predicate transitive(DataFlow::Node a,DataFlow::Node b){
isAssignedByCall(a,b) or hasDataFlow(a,b) or exists(DataFlow::Node c | transitive(a,c) and transitive(c,b))
}
from DataFlow::ModuleImportNode a,DataFlow::Node b,DataFlow::Node c,DataFlow::Node d
where isTarget(a,b)
and transitive(b,c)
select a,b,c
任何人都可以帮助改进此查询以在这种情况下也检索 # a b c
1 require('express') express app
?
谢谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。