mirror of
https://github.com/github/codeql.git
synced 2026-04-28 10:15:14 +02:00
add ClientRequst models for http-proxy
This commit is contained in:
@@ -94,6 +94,7 @@ import semmle.javascript.frameworks.LazyCache
|
||||
import semmle.javascript.frameworks.LodashUnderscore
|
||||
import semmle.javascript.frameworks.Logging
|
||||
import semmle.javascript.frameworks.HttpFrameworks
|
||||
import semmle.javascript.frameworks.HttpProxy
|
||||
import semmle.javascript.frameworks.Markdown
|
||||
import semmle.javascript.frameworks.NoSQL
|
||||
import semmle.javascript.frameworks.PkgCloud
|
||||
|
||||
54
javascript/ql/src/semmle/javascript/frameworks/HttpProxy.qll
Normal file
54
javascript/ql/src/semmle/javascript/frameworks/HttpProxy.qll
Normal file
@@ -0,0 +1,54 @@
|
||||
/**
|
||||
* Provides classes and predicates for working with the [http-proxy](https://www.npmjs.com/package/http-proxy) library.
|
||||
*/
|
||||
|
||||
import javascript
|
||||
|
||||
/**
|
||||
* Provides classes and predicates modelling the [http-proxy](https://www.npmjs.com/package/http-proxy) library.
|
||||
*/
|
||||
private module HttpProxy {
|
||||
/**
|
||||
* A call that creates a http proxy.
|
||||
*/
|
||||
class CreateServerCall extends API::CallNode, ClientRequest::Range {
|
||||
CreateServerCall() {
|
||||
this =
|
||||
API::moduleImport("http-proxy")
|
||||
.getMember(["createServer", "createProxyServer", "createProxy"])
|
||||
.getACall()
|
||||
}
|
||||
|
||||
override DataFlow::Node getUrl() { result = getParameter(0).getMember("target").getARhs() }
|
||||
|
||||
override DataFlow::Node getHost() { none() }
|
||||
|
||||
override DataFlow::Node getADataNode() { none() }
|
||||
}
|
||||
|
||||
/**
|
||||
* A call that proxies a request to some target.
|
||||
*/
|
||||
class ProxyCall extends API::CallNode, ClientRequest::Range {
|
||||
string method;
|
||||
|
||||
ProxyCall() {
|
||||
method = ["ws", "web"] and
|
||||
this = any(CreateServerCall server).getReturn().getMember(method).getACall()
|
||||
}
|
||||
|
||||
override DataFlow::Node getUrl() {
|
||||
exists(int optionsIndex |
|
||||
method = "web" and optionsIndex = 2
|
||||
or
|
||||
method = "ws" and optionsIndex = 3
|
||||
|
|
||||
result = getParameter(optionsIndex).getMember("target").getARhs()
|
||||
)
|
||||
}
|
||||
|
||||
override DataFlow::Node getHost() { none() }
|
||||
|
||||
override DataFlow::Node getADataNode() { none() }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user