Skip to content

Commit 6d78350

Browse files
author
Esben Sparre Andreasen
committed
JS: s/URLRequest/ClientRequest, merge with NodeJSLib::ClientRequest
1 parent cb2a6ed commit 6d78350

File tree

7 files changed

+51
-89
lines changed

7 files changed

+51
-89
lines changed

javascript/ql/src/semmle/javascript/frameworks/Electron.qll

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,12 @@ module Electron {
3737
/**
3838
* A Node.js-style HTTP or HTTPS request made using an Electron module.
3939
*/
40-
abstract class ClientRequest extends NodeJSLib::ClientRequest {}
40+
abstract class ElectronClientRequest extends NodeJSLib::NodeJSClientRequest {}
4141

4242
/**
4343
* A Node.js-style HTTP or HTTPS request made using `electron.net`, for example `net.request(url)`.
4444
*/
45-
private class NetRequest extends ClientRequest {
45+
private class NetRequest extends ElectronClientRequest {
4646
NetRequest() {
4747
this = DataFlow::moduleMember("electron", "net").getAMemberCall("request")
4848
}
@@ -56,7 +56,7 @@ module Electron {
5656
/**
5757
* A Node.js-style HTTP or HTTPS request made using `electron.client`, for example `new client(url)`.
5858
*/
59-
private class NewClientRequest extends ClientRequest {
59+
private class NewClientRequest extends ElectronClientRequest {
6060
NewClientRequest() {
6161
this = DataFlow::moduleMember("electron", "ClientRequest").getAnInstantiation()
6262
}
@@ -75,12 +75,12 @@ module Electron {
7575
exists(NodeJSLib::ClientRequestHandler handler |
7676
this = handler.getParameter(0) and
7777
handler.getAHandledEvent() = "redirect" and
78-
handler.getClientRequest() instanceof ClientRequest
78+
handler.getClientRequest() instanceof ElectronClientRequest
7979
)
8080
}
8181

8282
override string getSourceType() {
83-
result = "Electron ClientRequest redirect event"
83+
result = "ElectronClientRequest redirect event"
8484
}
8585
}
8686
}

javascript/ql/src/semmle/javascript/frameworks/NodeJSLib.qll

Lines changed: 28 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -504,48 +504,38 @@ module NodeJSLib {
504504
/**
505505
* A data flow node that is an HTTP or HTTPS client request made by a Node.js server, for example `http.request(url)`.
506506
*/
507-
abstract class ClientRequest extends DataFlow::DefaultSourceNode {
507+
abstract class NodeJSClientRequest extends DataFlow::DefaultSourceNode {
508+
508509
/**
509510
* Gets the options object or string URL used to make the request.
510511
*/
511512
abstract DataFlow::Node getOptions();
512513
}
513514

514515
/**
515-
* A data flow node that is an HTTP or HTTPS client request made by a Node.js server, for example `http.request(url)`.
516+
* A model of a URL request in the Node.js `http` library.
516517
*/
517-
private class HttpRequest extends ClientRequest {
518-
HttpRequest() {
519-
exists(string protocol |
518+
private class NodeHttpUrlRequest extends CustomClientRequest, NodeJSClientRequest {
519+
520+
DataFlow::Node url;
521+
522+
NodeHttpUrlRequest() {
523+
exists (string moduleName, DataFlow::SourceNode callee |
524+
this = callee.getACall() |
525+
(moduleName = "http" or moduleName = "https") and
520526
(
521-
protocol = "http" or
522-
protocol = "https"
523-
)
524-
and
525-
this = DataFlow::moduleImport(protocol).getAMemberCall("request")
527+
callee = DataFlow::moduleMember(moduleName, any(HTTP::RequestMethodName m).toLowerCase())
528+
or
529+
callee = DataFlow::moduleMember(moduleName, "request")
530+
) and
531+
url = getArgument(0)
526532
)
527533
}
528-
529-
override DataFlow::Node getOptions() {
530-
result = this.(DataFlow::MethodCallNode).getArgument(0)
531-
}
532-
}
533-
534-
/**
535-
* A data flow node that is an HTTP or HTTPS client request made by a Node.js process, for example `https.get(url)`.
536-
*/
537-
private class HttpGet extends ClientRequest {
538-
HttpGet() {
539-
exists(string protocol |
540-
(
541-
protocol = "http" or
542-
protocol = "https"
543-
)
544-
and
545-
this = DataFlow::moduleImport(protocol).getAMemberCall("get")
546-
)
534+
535+
override DataFlow::Node getUrl() {
536+
result = url
547537
}
548-
538+
549539
override DataFlow::Node getOptions() {
550540
result = this.(DataFlow::MethodCallNode).getArgument(0)
551541
}
@@ -556,13 +546,13 @@ module NodeJSLib {
556546
*/
557547
private class ClientRequestCallbackParam extends DataFlow::ParameterNode, RemoteFlowSource {
558548
ClientRequestCallbackParam() {
559-
exists(ClientRequest req |
549+
exists(NodeJSClientRequest req |
560550
this = req.(DataFlow::MethodCallNode).getCallback(1).getParameter(0)
561551
)
562552
}
563553

564554
override string getSourceType() {
565-
result = "ClientRequest callback parameter"
555+
result = "NodeJSClientRequest callback parameter"
566556
}
567557
}
568558

@@ -589,7 +579,7 @@ module NodeJSLib {
589579
*/
590580
class ClientRequestHandler extends DataFlow::FunctionNode {
591581
string handledEvent;
592-
ClientRequest clientRequest;
582+
NodeJSClientRequest clientRequest;
593583

594584
ClientRequestHandler() {
595585
exists(DataFlow::MethodCallNode mcn |
@@ -609,7 +599,7 @@ module NodeJSLib {
609599
/**
610600
* Gets a request this callback is registered for.
611601
*/
612-
ClientRequest getClientRequest() {
602+
NodeJSClientRequest getClientRequest() {
613603
result = clientRequest
614604
}
615605
}
@@ -626,7 +616,7 @@ module NodeJSLib {
626616
}
627617

628618
override string getSourceType() {
629-
result = "ClientRequest response event"
619+
result = "NodeJSClientRequest response event"
630620
}
631621
}
632622

@@ -643,7 +633,7 @@ module NodeJSLib {
643633
}
644634

645635
override string getSourceType() {
646-
result = "ClientRequest data event"
636+
result = "NodeJSClientRequest data event"
647637
}
648638
}
649639

@@ -667,7 +657,7 @@ module NodeJSLib {
667657
}
668658

669659
override string getSourceType() {
670-
result = "ClientRequest login event"
660+
result = "NodeJSClientRequest login event"
671661
}
672662
}
673663

@@ -725,7 +715,7 @@ module NodeJSLib {
725715
}
726716

727717
override string getSourceType() {
728-
result = "ClientRequest error event"
718+
result = "NodeJSClientRequest error event"
729719
}
730720
}
731721
}

javascript/ql/src/semmle/javascript/frameworks/UrlRequests.qll

Lines changed: 12 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
/**
2-
* Provides classes for modelling URL requests.
2+
* Provides classes for modelling the client-side of a URL request.
33
*
4-
* Subclass `UrlRequest` to refine the behavior of the analysis on existing URL requests.
5-
* Subclass `CustomUrlRequest` to introduce new kinds of URL requests.
4+
* Subclass `ClientRequest` to refine the behavior of the analysis on existing client requests.
5+
* Subclass `CustomClientRequest` to introduce new kinds of client requests.
66
*/
77

88
import javascript
99

1010
/**
1111
* A call that performs a request to a URL.
1212
*/
13-
class CustomUrlRequest extends DataFlow::CallNode {
13+
class CustomClientRequest extends DataFlow::CallNode {
1414

1515
/**
1616
* Gets the URL of the request.
@@ -21,11 +21,11 @@ class CustomUrlRequest extends DataFlow::CallNode {
2121
/**
2222
* A call that performs a request to a URL.
2323
*/
24-
class UrlRequest extends DataFlow::CallNode {
24+
class ClientRequest extends DataFlow::CallNode {
2525

26-
CustomUrlRequest custom;
26+
CustomClientRequest custom;
2727

28-
UrlRequest() {
28+
ClientRequest() {
2929
this = custom
3030
}
3131

@@ -55,7 +55,7 @@ private string urlPropertyName() {
5555
/**
5656
* A model of a URL request in the `request` library.
5757
*/
58-
private class RequestUrlRequest extends CustomUrlRequest {
58+
private class RequestUrlRequest extends CustomClientRequest {
5959

6060
DataFlow::Node url;
6161

@@ -88,7 +88,7 @@ private class RequestUrlRequest extends CustomUrlRequest {
8888
/**
8989
* A model of a URL request in the `axios` library.
9090
*/
91-
private class AxiosUrlRequest extends CustomUrlRequest {
91+
private class AxiosUrlRequest extends CustomClientRequest {
9292

9393
DataFlow::Node url;
9494

@@ -117,7 +117,7 @@ private class AxiosUrlRequest extends CustomUrlRequest {
117117
/**
118118
* A model of a URL request in an implementation of the `fetch` API.
119119
*/
120-
private class FetchUrlRequest extends CustomUrlRequest {
120+
private class FetchUrlRequest extends CustomClientRequest {
121121

122122
DataFlow::Node url;
123123

@@ -145,38 +145,10 @@ private class FetchUrlRequest extends CustomUrlRequest {
145145

146146
}
147147

148-
149-
/**
150-
* A model of a URL request in the Node.js `http` library.
151-
*/
152-
private class NodeHttpUrlRequest extends CustomUrlRequest {
153-
154-
DataFlow::Node url;
155-
156-
NodeHttpUrlRequest() {
157-
exists (string moduleName, DataFlow::SourceNode callee |
158-
this = callee.getACall() |
159-
(moduleName = "http" or moduleName = "https") and
160-
(
161-
callee = DataFlow::moduleMember(moduleName, httpMethodName())
162-
or
163-
callee = DataFlow::moduleMember(moduleName, "request")
164-
) and
165-
url = getArgument(0)
166-
)
167-
}
168-
169-
override DataFlow::Node getUrl() {
170-
result = url
171-
}
172-
173-
}
174-
175-
176148
/**
177149
* A model of a URL request in the `got` library.
178150
*/
179-
private class GotUrlRequest extends CustomUrlRequest {
151+
private class GotUrlRequest extends CustomClientRequest {
180152

181153
DataFlow::Node url;
182154

@@ -201,7 +173,7 @@ private class GotUrlRequest extends CustomUrlRequest {
201173
/**
202174
* A model of a URL request in the `superagent` library.
203175
*/
204-
private class SuperAgentUrlRequest extends CustomUrlRequest {
176+
private class SuperAgentUrlRequest extends CustomClientRequest {
205177

206178
DataFlow::Node url;
207179

javascript/ql/src/semmle/javascript/security/dataflow/RequestForgery.qll

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,11 @@ module RequestForgery {
6868
/**
6969
* The URL of a URL request, viewed as a sink for request forgery.
7070
*/
71-
private class UrlRequestUrlAsSink extends Sink {
71+
private class ClientRequestUrlAsSink extends Sink {
7272

73-
UrlRequest request;
73+
ClientRequest request;
7474

75-
UrlRequestUrlAsSink() {
75+
ClientRequestUrlAsSink() {
7676
this = request.getUrl()
7777
}
7878

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
import javascript
22

3-
from NodeJSLib::ClientRequest cr
3+
from Electron::ElectronClientRequest cr
44
select cr
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
import javascript
22

3-
from NodeJSLib::ClientRequest cr
3+
from NodeJSLib::NodeJSClientRequest cr
44
select cr
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
import javascript
22

3-
from UrlRequest r
3+
from ClientRequest r
44
select r, r.getUrl()

0 commit comments

Comments
 (0)